gpt4 book ai didi

javascript - 手动将函数插入 Javascript/Nodejs 事件队列?

转载 作者:行者123 更新时间:2023-12-01 00:24:50 24 4
gpt4 key购买 nike

例如,如果我想这样做

function doA(callback) {
console.log("Do A")
callback()
}

function doB() {
console.log("Do B")
}

function doC() {
console.log("Do C")
}

doA(doC)
doB()

我想要输出

Do A
Do B
Do C

但是,获得此结果的唯一方法是使用此 hack 将项目推送到队列:

  setTimeout(() => {
doTask();
}, 0);

有没有办法手动将项目添加到 javscript/nodejs 事件队列中?我更多地要求这是为了理论练习而不是任何实际的编程需求。如果不先调用已经异步的内置函数,似乎就无法执行任何异步任务。

最佳答案

setTimeout 工作正常,我不认为这是一种黑客行为。但还有queueMicrotask ,这听起来可能更适合您的目的 - 它对一个微任务进行排队,一旦所有其他同步 Javascript 完成执行,该微任务就会运行:

function doA(callback) {
console.log("Do A")
queueMicrotask(callback);
}

function doB() {
console.log("Do B")
}

function doC() {
console.log("Do C")
}

doA(doC)
doB()

它基本上相当于Promise.resolve().then(callback)

请注意,立即 setTimeout 对一个宏任务进行排队(一旦事件循环到达 processing the next message 就会运行,这可能需要几毫秒) - 在相比之下,queueMicrotaskPromise.resolve.then 对微任务进行排队,该微任务基本上会在其他同步 JS 完成后立即运行。

另请记住,queueMicrotask 虽然在 Node 中受支持,但在浏览器中尚未得到广泛支持,因此,如果您想在面向公众的网站上使用它,请确保包含polyfill(或使用 Promise.resolve 方法)。

关于javascript - 手动将函数插入 Javascript/Nodejs 事件队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59101001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com