Javascript 将回调直接排入事件队列

Javascript 将回调直接排入事件队列,javascript,asynchronous,event-loop,Javascript,Asynchronous,Event Loop,在javascript中,是否有一种方法可以将回调函数直接排入事件队列,而不是以0作为第二个参数设置超时?在浏览器中,您可以使用或: 在Node.js中,您可以使用: 注意:requestIdleCallback在回答这个问题时是相当新的,所以在应用程序中使用它之前。我不这么认为,这是事件队列的一个点,不是吗?即使setTimeout也将等待以下同步操作首先完成setTimeout(()=>console.log('first'),0)console.log('second')将打印“secon

在javascript中,是否有一种方法可以将回调函数直接排入事件队列,而不是以0作为第二个参数设置超时?

在浏览器中,您可以使用或:

在Node.js中,您可以使用:


注意:
requestIdleCallback
在回答这个问题时是相当新的,所以在应用程序中使用它之前。

我不这么认为,这是事件队列的一个点,不是吗?即使setTimeout也将等待以下同步操作首先完成
setTimeout(()=>console.log('first'),0)console.log('second')
将打印“second”,然后打印“first”。网络工作者在一个单独的队列中执行任务,也许他们能帮上忙?@Jorg看我的答案很酷,我喜欢这样。。。requestAnimationFrame是否以某种方式进行了优先级排序?或者它只是在浏览器以标准刷新率(通常为60fps)重新绘制自身时第一次执行
requestAnimationFrame
将回调排队,以便在下一个绘制周期运行之前执行。您不能在以相同方式排队的其他回调之前插入回调,但它不依赖于任何类型的超时时间,因此应该很快发生。不知道浏览器使用了
requestAnimationFrame
本身。Cheers@Jorg与其说它直接使用它,不如说它提供了一个接口,让您可以将更新与渲染周期同步。
requestAnimationFrame(() => console.log('Browser is repainting'));

requestIdleCallback(() => console.log('Browser has run out of things to do'));
process.nextTick(() => console.log('Next tick in the event loop'));