javascript - Promise 的执行顺序

标签 javascript asynchronous promise timeout

我正在读书 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/

相关文章:

javascript - THREE.js 轨道控件

javascript - 如何使用正则表达式从文件中加载 jquery 中的 json?

javascript - 如何计算选择 h3 的价格?

javascript - node.js/express app - 使用哪种异步方法来替换对 HGET 的嵌套调用?

javascript - 如何在ajax回调中保留变量?

javascript - 用于 Visual Studio 2010 问题的 JS Lint

然后 Javascript promise 不会在 for 循环中使用 Parse 查询顺序

javascript - JavaScript 永远悬而未决的 promise 不好吗?

node.js - 将 promise 的结果链接并传递给进一步的 promise

javascript - 相当于新 ES6 中的 async.map 吗?