如何在ES6中使用承诺对象

  介绍

如何在ES6中使用承诺对象?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

<强>一、承诺是什么

承诺是异步编程的一种解决方案,它是一个容器,里面保存着某个未来才会结束的事件的结果。它有三种状态,只有异步操作的结果才能决定当前的状态,不受外界因素的影响。而一旦状态改变,就不会再变,也就是状态凝固了(解决),任何时候都可以得到这个结果。

如何在ES6中使用承诺对象

承诺的缺点:
1。无法取消承诺,一旦新建它就会立即执行,无法中途取消。
2。如果不设置回调函数,保证内部抛出的错误,不会反应到外部。
3。当处于等待状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

<强>二、承诺的用法

/* *   ,*创建承诺实例   ,* @type {承诺}   ,* @param  resolve 在异步操作成功时调用   ,* @param  reject 在异步操作失败时调用   ,*/const  promise =, new 承诺(函数(解决,,拒绝),{//才能,…,some 代码   if 才能;(/*,异步操作成功,*/){   ,,,解决(价值);   ,,},{else    ,,,拒绝(错误);   ,,}   });//调用承诺   promise.then(功能(价值),{   ,//成功   },,函数(错误),{   ,//失败   });

<强>承诺新建后就会立即执行。

let  promise =, new 承诺(函数(解决,,拒绝),{   ,console.log(& # 39;承诺# 39;);   ,解决();   });   promise.then(函数(),{   ,console.log(& # 39;解决# 39;公司);   });   console.log(& # 39;嗨! & # 39;);//,Promise  (Promise 新建后立即执行,所以首先输出的是承诺)//,你好!//,resolved (然后方法指定的回调函数,将在当前脚本所有同步任务执行完才会执行,所以解决最后输出)

<>强如果调用解决函数和拒绝函数时带有参数,那么它们的参数会被传递给回调函数.reject函数的参数通常是错误的对象的实例,表示抛出的错误;解决函数的参数除了正常的值以外,还可能是另一个承诺实例。

const  p1 =, new 承诺(function (解决,,拒绝),{   ,setTimeout(),=祝辞,拒绝(new 错误(& # 39;失败# 39;)),,3000)   })   const  p2 =, new 承诺(function (解决,,拒绝),{   ,setTimeout(),=祝辞,解决(p1), 1000)   })   p2   ,不要犹豫(result =祝辞,console.log(结果))   ,.catch (error =祝辞,console.log(错误)   错误://,,失败

上面代码中,p1是一个承诺,3秒之后变为rejected.p2的状态在1秒之后改变,解决方法返回的是p1。由于p2返回的是另一个承诺,导致p2自己的状态无效了,由p1的状态决定p2的状态,所以,后面的然后语句都变成针对后者(p1)。又过了2秒,p1变为拒绝,导致触发抓方法指定的回调函数。

<强>三,保证原型上的方法

Promise.prototype.then ()

<李>

然后方法的第一个参数是解决状态的回调函数,第二个参数(可选)是拒绝状态的回调函数。

<李>

然后方法返回的是一个新的承诺实例,但不是原来那个承诺实例,因此可以采用链式写法,即然后方法后面再调用另一个然后方法。

getJSON (“/post/1. json"),然后(=,post 祝辞,getJSON (post.commentURL)   )(   ,comments =祝辞console.log(“解决:,“,,评论),   ,err =祝辞console.log(“拒绝:“,,呃)   );

Promise.prototype.catch ()

<李>

Promise.prototype.catch方法是。然后(null,排斥)的别名,用于指定发生错误时的回调函数。

<李>

承诺对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止。也就是说,错误总是会被下一个捕捉语句捕获。

getJSON (& # 39;/post/1. json # 39;),然后(函数(post), {   ,return  getJSON (post.commentURL);   })(函数(评论),{   ,//some 代码   }).catch(函数(错误),{   ,//处理前面三个承诺产生的错误   });//上面代码中,一共有三个,Promise 对象:一个由getJSON产生,两个由然后产生。它们之中任何一个抛出的错误,都会被最后一个捉捕获。

Promise.prototype.finally ()

如何在ES6中使用承诺对象