Promise

作者: 招猫逗狗追兔子 | 来源:发表于2017-07-25 14:12 被阅读0次

有了promise对象就可以将异步操作以同步操作的流程表达出来,避免了嵌套的回调函数。

varp1=newPromise(function(resolve,reject){setTimeout(()=>reject(newError('fail')),3000)})varp2=newPromise(function(resolve,reject){setTimeout(()=>resolve(p1),1000)})p2.then(result=>console.log(result)).catch(error=>console.log(error))// Error: fail

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

注意,调用resolve或reject并不会终结 Promise 的参数函数的执行。

newPromise((resolve,reject)=>{resolve(1);console.log(2);}).then(r=>{console.log(r);});// 2// 1

一般来说,调用resolve或reject以后,Promise 的使命就完成了,后继操作应该放到then方法里面,而不应该直接写在resolve或reject的后面。所以,最好在它们前面加上return语句,这样就不会有意外。

相关文章

网友评论

      本文标题:Promise

      本文链接:https://www.haomeiwen.com/subject/jlcwkxtx.html