作家
登录

JavaScript异步与Promise实现

作者: 来源: 2017-05-12 10:49:32 阅读 我要评论

输出两行信息:我们发明第二个then办法接收到的最终值是undefined,为什么呢?看看第一个then办法调用后返回的promise状况如下:

如上图,发明调用第一个then办法后,返回promise最终值为undefined,传递给第二个then的回调,如不雅把膳绫擎的例子稍加修改:

  1. var promise = new Promise((resolve, reject) => { 
  2.         setTimeout(function() { 
  3.             resolve('完成'); 
  4.         }, 10); 
  5.     }); 
  6.     promise.then((msg) => { 
  7.         console.log('first messaeg: ' + msg); 
  8.         return msg + '第二次'
  9.     }).then((msg) => { 
  10.         console.log('second messaeg: ' + msg); 
  11.     });  

输出如下:

起首创建一个构造函数,供实例化创建promise,该构造函数接收一个函数参数,实例化时,会急速调用该函数,然后返回一个Promise对象:

此次两个then办法的回调都接收到了最终值,正如我们前文所说,'then'办法返回一个新promise,并且该新promise根据其传入的回调履行的返回值,进行决定,而函数未明白return返回值瓯,默认返回的是undefined,这也是膳绫擎实例第二个then办法的回调接收undefined参数的原因。

参数

这里应用了链式调用,我们须要明白:共产生三个promise,初始promise,两个then办法分别返回一个promise;而第一个then办法返回的新promise是第二个then办法的主体,而不是初始promise。

Promise.prototype.catch(onRejected)

该办法为promise添加拒绝回调函数,将返回一个新promise,该新promise根据回调函数履行的返回值进行决定;若promise决定为完成状况,则新promise根据其最终值进行决定。

  1. var promise = new Promise((resolve, reject) => { 
  2.         setTimeout(() => { 
  3.             reject('failed'); 
  4.         }, 0); 
  5.     }); 
  6.  
  7.     var promise2 = promise.catch((reason) => { 
  8.         console.log(reason); 
  9.         return 'successed'
  10.     }); 
  11.     var promise3 = promise.catch((reason) => { 
  12.         console.log(reason); 
  13.     }); 
  14.     var promise4 = promise.catch((reason) => { 
  15.         console.log(reason); 
  16.         throw 'failed 2'
  17.     });  

输出如下图:

膳绫擎例子是同步代码履行的异常,当异常产生在异步义务内时,又会若何呢?,假如把上例中代码放在一个setTimeout准时器内履行:


  推荐阅读

  开源SDN解决方案如何确保网络拓扑无缝切换?

电信运营商(Telcos)和收集办事供给商(ISP)面对着应用动态拓扑调剂的挑衅,以确保连接的稳定性和持续性。这意味>>>详细阅读


本文标题:JavaScript异步与Promise实现

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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