问题描述看了一段promise的源码看到这段很是不懂jsfunction resolve(value) { // value成功态时接收的终值 if(value instanceof Promise) { return value.then(resolve, reject);
}
}你期待的结果是什么?实际看到的错误信息又是什么?promise里resolvePromise这个函数中不是已经通过if (x instanceof Promise)else if (x != null && ((typeof x === 'object') || (typeof x === 'function')))当到resolve为什么要去判断value是不是promise呢
1 回答
翻翻过去那场雪
TA贡献2065条经验 获得超14个赞
可以考虑下面的代码:
let promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('promise1')
}, 5000)
})let promise2 = new Promise((resolve, reject) => {
resolve(promise1)
}).then(result => { console.log(result) // 大概5s之后输出字符串promise1})当你resolve一个promise的时候,有两种结果:
把
promise对象当成该promiseresolve的结果;把
promise对象resolve的结果当成该promise resolve的结果;
如果你想要结果1,if (x instanceof Promise)这句代码就不需要了,但是promise的规范规定的应该是结果2,所以大部分实现都会有这个if (x instanceof Promise)判断。
在浏览器实际运行上面的代码,是在大概5秒后log出字符串promise1,如果是结果1的话,应该是比较快的log出一个promise对象。再比如下面的例子:
let promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('promise1')
}, 5000)
})let promise2 = new Promise((resolve, reject) => {
resolve('promise2')
}).then(() => { return promise1
}).then(result => { console.log(result) // 同样是大概5s之后输出字符串promise1})添加回答
举报
0/150
提交
取消
