作家
登录

JavaScript异步与Promise实现

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

如图中所输出内容,我们须要明白以下几点:

  1. catch会为promise注册拒绝回调函数,一旦异步操作停止,调用了reject回调函数,则依次履行注册的拒绝回调;
  2. 别的有一点和then办法类似,catch办法返回的新promise将应用其回调函数履行的返回值进行决定,如promise2,promise3状况均为完成(resolved),然则promise3最终值为undefined,而promise2最终值为successed,这是因为在调用promise.catch办法时,传入的回调没有显式的设置返回值;
  3. 对于promise4,因为调用catch办法时,回调中throw抛出异常,所以promise4状况为拒绝(rejected),拒绝原因为抛出的异常;
  4. 特别须要留意的是这里一共有四个promise,一旦决定,它们之间都是自力的,我们须要明白无论是then办法,照样catch办法,都邑返回一个新promise,此新promise与初始promise互相自力。

catch办法和then办法的第二个参数一样,都是为promise注册拒绝回调。

链式调用

和jQuery的链式调用一样,Promise设计也支撑链式调用,上一步的返回值作为下一步办法调用的主体:

  1. new Promise((resolve, reject) => { 
  2.        setTimeout(()=>{ 
  3.            resolve('success'); 
  4.        },0); 
  5.    }).then((msg) => { 
  6.        return 'second success'
  7.    }).then((msg) => { 
  8.        console.log(msg); 
  9.    });  

缺点处理

我们前文提到了JavaScript异步回调中的异常是难以处理的,而Promise对异步异常和缺点的处理是比较便利的:

  1. var promise = new Promise((resolve, reject) => { 
  2.        test(); // 抛出异常 
  3.        resolve('success'); // 被忽视 
  4.    }); 
  5.    console.log(promise); 
  6.    promise.catch((reason) => { 
  7.        console.log(reason); 
  8.    });  

输出如图,履行test抛出异常,导致promise被拒绝,拒绝原因即抛出的异常,然后履行catch办法注册的拒绝回调:

决定,完成与拒绝

  1. var promise = new Promise((resolve, reject) => { 
  2.         resolve(Promise.reject('failed')); 
  3.     }); 
  4.     promise.then((msg) => { 
  5.         console.log('完成:' + msg); 
  6.     }, (reason) => { 
  7.         console.log('拒绝:' + reason); 
  8.     });  

输出如图:

上例中,在创建一个Promise时,给resolve函数传递的是一个拒绝Promise,此时我们发明promise状况是rejected,所以这里第一个参数函数履行,完成的是一个更接近决定的过程(可以参考前文静述的决定过程),所以定名为resolve是更合理的;而第二个参数函数,则只是拒绝该promise:

  1. var promise = new Promise((resolve, reject) => { 
  2.        reject(Promise.resolve('success'

      推荐阅读

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

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


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

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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