猿问

promise的源码问题,谷歌不到特来求救

问题描述

看了一段promise的源码

看到这段很是不懂

js

function 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呢


慕田峪4524236
浏览 495回答 1
1回答

翻翻过去那场雪

可以考虑下面的代码: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})
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答