关于ES6 Promise的一个问题
代码:
var p1 = new Promise(function (resolve, reject) {
setTimeout(() => reject("123"), 3000)
})
var p2 = new Promise(function (resolve, reject) {
setTimeout(() => resolve(p1), 1000)
})
p2
.then(result => console.log("error01",result),
result => console.log("error02",result))
.catch(error => console.log("error2",error))
最后打出error02 123
并没有看懂p1和p2之间的变化逻辑,以及最后就怎么输出这个了,应该是我比较愚钝。
有没有懂的朋友能帮助讲解一下,十分感谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Promise.resolve(promise);当resolve方法中传入一个promise对象时,则返回的状态会采用传入promise对象的返回状态,也是就是说这里p2的状态会采用p1返回的状态。
因为p1中reject('123'),所以p2返回的状态自然为p1的reject('123'),即调用了.then中的第二个reject时候的回调函数即 result => console.log("error02",result)。
resolve的参数如果是个promise的话,它会使用那个promise的结束状态作为自己的结束状态
这里面主要有状态传递,即如果p2 resolve的是另一个Promise(p1)对象,则p2的状态由p1决定。