【问题标题】: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");

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 2012-09-11
相关资源
最近更新 更多