请教一下为什么这段代码的运行结果是这样的
1首先被输出
两秒后,2,3,4同时被输出
然后又过了两秒11被输出
不太理解,在火狐和chrome的调试上都是这个样子的
then 中的 callback 是接收 Promise 的 resolve 值作为参数,而不是 resolve 和 reject 函数。
所以,除第一个 function(resolve, reject)
之外,后面的所有 resolve
、reject
都是 undefined
。
Promise实例中的console.log()还是同步,resolve()的调用才是真正的开始了异步。你可以在Promise的实例前后分别加一个console.log()查看一下,有兴趣可以看一下源码。
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
6 回答822 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
promise有三种状态:pending(进行中)、fulfilled(已成功,也就是resolved)和rejected(已失败)。当你生成一个Promise实例的时候,传入的方法会先执行,也就是输出1。两秒后,调用了resovle方法,改变了promise的状态,执行后面的第一个then方法中的回调。then方法,在没有返回promise实例的情况下,默认返回resolved状态的promise,因此,会紧跟着执行后续then方法中的代码,也就是处处2,3,4。在最后的一个then方法中因为是定时器,会在11秒之后执行,所以会在11秒后,输出11。
而前面几个then方法中的定时器,其实是没用的。因为,每个promise在resolve的时候,并没有传入传递的参数,就和setTimeout(undefined, 0)一样,并不会执行什么。