我正在读书 this documentation 关于 Promise,我不明白一些事情。
const wait = ms => new Promise(resolve => setTimeout(resolve, ms));
wait().then(() => console.log(4));
Promise.resolve().then(() => console.log(2)).then(() => console.log(3));
console.log(1);
这个例子输出1 2 3 4
。
所以,先打印1
是正常的,但为什么接下来是2 3
而不是4
呢?
它们都位于 then()
内,4
位于 setTimeout
内,但没有将毫秒作为参数传递。
最佳答案
setTimeout
就是全部原因。对比一下试试这个:
const wait2 = ms => new Promise(resolve => resolve());
wait2().then(() => console.log(4));
Promise.resolve().then(() => console.log(2)).then(() => console.log(3));
console.log(1);
哪里wait
函数在没有超时的情况下解析。这符合您的预期,1423
即使您没有将号码传递给 setTimeout
,javascript解释器将等到处理队列被清除后再运行 setTimeout
的内容。
关于javascript - Promise 的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58914926/