如何解决setImmediate 或 IO 回调会先运行吗?
在这个图中说事件循环将运行 I/O 回调(axios 请求),然后是检查阶段(setImmediate),但是当我测试这个时,情况正好相反,我需要解释执行那个代码。
解决方法
console.log('first'); // logs instantly
setImmediate(() => console.log('immediate')); // will be executed in the next iteration of the event loop.
new Promise((resolve) => { // starts in promise in pending state
console.log('insidePromise');
const data = 'Promise';
resolve(data);
}).then((d) => console.log(d)); // prints after Promise is resolved
输出 -
first
insidePromise
Promise
immediate
当 Promise 被调用时,它开始处于挂起状态并等待解决。
setImmediate - 在处理 resolve 之前在此处触发,因为 setImmediate
必须在事件循环中执行。
https://nodejs.dev/learn/understanding-javascript-promises
一旦一个promise被调用,它就会以pending状态开始。这意味着调用函数会继续执行,而 Promise 则处于挂起状态,直到它解析为止,将请求的任何数据都交给调用函数。
https://nodejs.dev/learn/understanding-setimmediate
作为 setImmediate() 参数传递的任何函数都是在事件循环的下一次迭代中执行的回调。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。