有比setTimeOut(fn, 0)更好的选择吗?

8

是否有其他方法可以实现在JavaScript的消息队列上安排回调函数以在当前堆栈为空后运行?

换句话说,是否有一种方法,无论是使用Promises还是第三方软件包,将回调推送到任务队列中,以便在当前堆栈为空后运行?

换句话说,有哪些等效/替代方法可以传递0setTimeout以利用异步回调?

欢迎针对所有环境和所有ECMAScript版本提供答案。


你在使用浏览器还是node.js环境? - Tushar Shahi
@TusharShahi 两个环境都是。 - Gustavo Maximo
请参见 https://dev59.com/ja3la4cB1Zd3GeqPN4LD。 - Bergi
1个回答

5
在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");


具有讽刺意味的是,setImmediate 最后执行。顺便说一句,这是一个关于任务调度的好视频:https://www.youtube.com/watch?v=8eHInw9_U8k - CodeManX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接