AJax技术

Javascript依赖注入学习笔记(7)

字号+ 作者:H5之家 来源:H5之家 2016-03-23 11:00 我要评论( )

} // then的参数不是函数 // 会被忽略,也就是promise穿透 else { value = detail; succeeded = true; } if (promise._state === PENDING) { if (hasCallback succeeded || settled === FULFILLED) { resolve(promi

    }
    // then的参数不是函数
    // 会被忽略,也就是promise穿透
    else {
      value = detail;
      succeeded = true;
    }

    if (promise._state === PENDING) {
      if (hasCallback && succeeded
          || settled === FULFILLED) {
        resolve(promise, value);
      } else if (failed || settled === REJECTED) {
        reject(promise, error);
      }
    }
  }
例如如下例子,结果都是输出foo:

Promise.resolve('foo').then(Promise.resolve('bar')).then(function (result) { 
  console.log(result);
});

Promise.resolve('foo').then(null).then(function (result) { 
  console.log(result);
});
拥抱金字塔
promise能够很好的解决金字塔问题,但是有时候我们也是需要适当使用金字塔的,例如我们要同时获取两个promise的结果,但是这两个promise是有关联的,也就是有顺序的,该怎么办?

也许解决方案会是这样,定义一个全局变量,这样在第二个then里面就可以使用两个promise的结果了。

var user; 
getUserByName('nolan').then(function (result) { 
  user = result;
  return getUserAccountById(user.id);
}).then(function (userAccount) {
  // 好了, "user" 和 "userAccount" 都有了
});
但是这不是最好的方案,此时何不抛弃成见,拥抱金字塔:

getUserByName('nolan').then(function (user) { 
  return getUserAccountById(user.id).then(function (userAccount) {
    // 好了, "user" 和 "userAccount" 都有了
  });
});
promise是如此强大而且难以理解,但是抓住实质之后其实并没有想象的那么复杂,这也是为什么我要写下这篇文章。更过关于如何正确使用promise

没有了

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Ajax+smarty技术实现无刷新分页

    Ajax+smarty技术实现无刷新分页

    2016-03-15 15:00

  • JavaScript学习总结之JS、AJAX应用

    JavaScript学习总结之JS、AJAX应用

    2016-02-06 15:02

  • 学习JavaScript设计模式之代理模式

    学习JavaScript设计模式之代理模式

    2016-01-25 17:02

  • javascript、jquery、AJAX总结

    javascript、jquery、AJAX总结

    2016-01-25 17:00

网友点评
j