作家
登录

30分钟,让你彻底明白Promise原理

作者: 来源: 2017-06-08 10:02:44 阅读 我要评论

我们结合例4的代码,分析下膳绫擎的代码逻辑,为了便利浏览,我把例4的代码贴在这里:

  1. // 例4 
  2.  
  3. getUserId() 
  4.  
  5.     .then(getUserJobById) 
  6.  
  7.     .then(function (job) { 
  8.  
  9.         // 对job的处理 
  10.  
  11.     }); 
  12.  
  13.   
  14.  
  15. function getUserJobById(id) { 
  16.  
  17.     return new Promise(function (resolve) { 
  18.  
  19.         http.get(baseUrl + id, function(job) { 
  20.  
  21.             resolve(job); 
  22.  
  23.         }); 
  24.  
  25.     }); 
  26.  
  27.  
  1. then办法中,创建并返回了新的Promise实例,这是串行Promise的基本,并且支撑链式调用。
  2. handle办法是promise内部的办法。then办法传入的形参onFulfilled以及创建新Promise实例时传入的resolve均被push到当前promise的callbacks队列中,这是连接当前promise和后邻promise的关键地点(这里必定要好好的分析下handle的感化)。
  3. getUserId生成的promise(简称getUserId promise)异步操作成功,履行其内部办法resolve,传入的参数恰是异步操作的结不雅id
  4. 调用handle办法处理callbacks队列中的回调:getUserJobById办法,生成新的promise(getUserJobById promise)
  5. 履行之前由getUserId promise的then办法生成的新promise(称为bridge promise)的resolve办法,传入参数为getUserJobById promise。这种情况下,会将该resolve办法传入getUserJobById promise的then办法中,并直接返回。
  6. 在getUserJobById promise异步操作成功时,履行其callbacks中的回调:getUserId bridge promise中的resolve办法
  7. 最后履行getUserId bridge promise的后邻promise的callbacks中的回调。

更直白的可以看下面的图,一图胜千言(都是根据本身的懂得画出来的,如有纰谬迎接斧正):

掉败处理

  1. //例5 
  2.  
  3. function getUserId() { 
  4.  
  5.     return new Promise(function(resolve) { 
  6.  
  7.         //异步请求 
  8.  
  9.         http.get(url, function(error, results) { 
  10.  
  11.             if (error) { 
  12.  
  13.                 reject(error); 
  14.  
  15.             } 
  16.  
  17.             resolve(results.id) 
  18.  
  19.         }) 
  20.  
  21.     }) 
  22.  

  23.   推荐阅读

      2017年上半年重大黑客事件盘点

    16. 美国法律论坛71万账户泄漏,涉国度安然局、FBI等本年4月,达拉斯紧急警备孀体系被黑客入侵。导致该城市的156个紧急戒备器被激活,警笛声持续一个小时,激发市平易近惊恐。 在以前的201>>>详细阅读


    本文标题:30分钟,让你彻底明白Promise原理

    地址:http://www.17bianji.com/lsqh/35631.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)