我们结合例4的代码,分析下膳绫擎的代码逻辑,为了便利浏览,我把例4的代码贴在这里:
- // 例4
- getUserId()
- .then(getUserJobById)
- .then(function (job) {
- // 对job的处理
- });
- function getUserJobById(id) {
- return new Promise(function (resolve) {
- http.get(baseUrl + id, function(job) {
- resolve(job);
- });
- });
- }
- then办法中,创建并返回了新的Promise实例,这是串行Promise的基本,并且支撑链式调用。
- handle办法是promise内部的办法。then办法传入的形参onFulfilled以及创建新Promise实例时传入的resolve均被push到当前promise的callbacks队列中,这是连接当前promise和后邻promise的关键地点(这里必定要好好的分析下handle的感化)。
- getUserId生成的promise(简称getUserId promise)异步操作成功,履行其内部办法resolve,传入的参数恰是异步操作的结不雅id
- 调用handle办法处理callbacks队列中的回调:getUserJobById办法,生成新的promise(getUserJobById promise)
- 履行之前由getUserId promise的then办法生成的新promise(称为bridge promise)的resolve办法,传入参数为getUserJobById promise。这种情况下,会将该resolve办法传入getUserJobById promise的then办法中,并直接返回。
- 在getUserJobById promise异步操作成功时,履行其callbacks中的回调:getUserId bridge promise中的resolve办法
- 最后履行getUserId bridge promise的后邻promise的callbacks中的回调。
更直白的可以看下面的图,一图胜千言(都是根据本身的懂得画出来的,如有纰谬迎接斧正):
掉败处理
- //例5
- function getUserId() {
- return new Promise(function(resolve) {
- //异步请求
- http.get(url, function(error, results) {
- if (error) {
- reject(error);
- }
- resolve(results.id)
- })
- })
推荐阅读
16. 美国法律论坛71万账户泄漏,涉国度安然局、FBI等本年4月,达拉斯紧急警备孀体系被黑客入侵。导致该城市的156个紧急戒备器被激活,警笛声持续一个小时,激发市平易近惊恐。 在以前的201>>>详细阅读
本文标题:30分钟,让你彻底明白Promise原理
地址:http://www.17bianji.com/lsqh/35631.html
1/2 1