promise的源码问题,谷歌不到特来求救十分感谢

问题描述
看了一段promise的源码
看到这段很是不懂
js
functionresolve(value){//value成功态时接收的终值
if(valueinstanceofPromise){
returnvalue.then(resolve,reject);
}
}
你期待的结果是什么?实际看到的错误信息又是什么?
promise里resolvePromise这个函数中不是已经通过
if(xinstanceofPromise)
elseif(x!=null&&((typeofx==='object')||(typeofx==='function')))
当到resolve为什么要去判断value是不是promise呢
斯蒂芬大帝
浏览 313回答 2
2回答

万千封印

可以这么理解,接收到resolve,表示当前这一阶段的promise成功返回了,但至于返回值是什么,并不关心。所以需要valueinstanceofPromise这层判断,如果返回的是promise,那么就进行then的操作,然后又会走进resolve方法,循环执行下去,直到链式方法的结束。

泛舟湖上清波郎朗

可以考虑下面的代码:letpromise1=newPromise((resolve,reject)=>{setTimeout(()=>{resolve('promise1')},5000)})letpromise2=newPromise((resolve,reject)=>{resolve(promise1)}).then(result=>{console.log(result)//大概5s之后输出字符串promise1})当你resolve一个promise的时候,有两种结果:把promise对象当成该promiseresolve的结果;把promise对象resolve的结果当成该promiseresolve的结果;如果你想要结果1,if(xinstanceofPromise)这句代码就不需要了,但是promise的规范规定的应该是结果2,所以大部分实现都会有这个if(xinstanceofPromise)判断。在浏览器实际运行上面的代码,是在大概5秒后log出字符串promise1,如果是结果1的话,应该是比较快的log出一个promise对象。再比如下面的例子:letpromise1=newPromise((resolve,reject)=>{setTimeout(()=>{resolve('promise1')},5000)})letpromise2=newPromise((resolve,reject)=>{resolve('promise2')}).then(()=>{returnpromise1}).then(result=>{console.log(result)//同样是大概5s之后输出字符串promise1})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript