如何手动向callback queue(回调队列)中添加消息?
手动向JS回调队列添加消息的实现方式
JS 中的回调队列实际分为两类,不同队列的添加方式不同,执行优先级也有区别:
宏任务队列(即常规所说的callback queue)添加方式
- 全环境通用方案:使用延迟为0的
setTimeout,浏览器、Node.js 都支持setTimeout(() => { // 此处逻辑会被推入宏任务队列,等待调用栈完全清空后执行 }, 0) - Node.js 专属方案:使用
setImmediate,优先级比setTimeout(cb, 0)更高,会在本轮事件循环的IO操作结束后立即执行setImmediate(() => { // Node.js 环境下直接添加到宏任务队列 })
微任务队列添加方式
微任务优先级高于宏任务,会在当前执行的宏任务结束后、下一个宏任务开始前全部执行完毕,添加方式如下:
- 全环境通用方案:使用
Promise.prototype.thenPromise.resolve().then(() => { // 此处逻辑会被推入微任务队列 }) - Node.js 专属方案:使用
process.nextTick,优先级比Promise微任务更高,会在当前调用栈清空后立即执行,早于所有其他微任务process.nextTick(() => { // Node.js 环境下最高优先级的异步任务 })
内容的提问来源于stack exchange,提问作者Raz Buchnik
相关产品推荐
相关产品推荐

