在阮一峰老师的《ES6标准入门》里面看到关于Promise的一个代码,让我很费解:
var p1 = new Promise(function (resolve, reject) {
setTimeout(() => reject(new Error('fail')), 3000)
})
var p2 = new Promise(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,所以后面的then语句都变成针对后者(p1)。又过了2秒,p1变为rejected,导致触发catch方法指定的回调函数。
这个就让我觉得很费解了。
为什么p2后跟的then针对的是p1而不是p2本身呢?
p2中resolve(p1)这个到底发生了什么呢?为什么说“resolve方法返回的是p1”?resolve方法在此处不是应该是.then(result => console.log(result))吗?它返回undefined的呀?
如果我就是想在控制台中打印出p1这个对象本身,即可以查看p1的属性等等,那么p2的then的回调函数代码应该怎么写呢?
撒科打诨
相关分类