如何在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中使用承诺对象