问题描述看了一段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对象
当成该promise
resolve
的结果;把
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
提交
取消