【问题标题】:Is there a better alternative to setTimeOut(fn, 0)?有没有比 setTimeOut(fn, 0) 更好的选择?
【发布时间】:2021-10-11 00:33:05
【问题描述】:
是否有另一种方法可以实现在 JavaScript 的 message queue 上调度回调函数以在当前 stack 为空后运行的相同行为?
换句话说,有没有办法,无论是Promises还是第三方包,都可以将回调推送到task queue,使其在当前stack为空之后运行?
换句话说,将0 传递给setTimeout 以利用异步回调有哪些等效/替代方法?
欢迎所有环境和所有 ECMAScript 版本的答案。
【问题讨论】:
标签:
javascript
asynchronous
promise
callback
settimeout
【解决方案1】:
在nodejs环境下,你可以通过以下方式执行异步任务。
参考。 https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/
setImmediate(() => console.log("setImmediate"));
setTimeout(() => console.log("setTimeout"));
Promise.resolve().then(() => console.log("Promise"));
process.nextTick(() => console.log("nextTick"));
console.log("sync");
输出:
sync
nextTick
Promise
setTimeout
setImmediate
在现代浏览器中,您可以通过以下方式执行异步任务。
setTimeout(() => console.log("setTimeout"));
Promise.resolve().then(() => console.log("Promise"));
console.log("sync");