process 對象是 Node.js 核心 API 提供的少數(shù)全局對象之一。它可以從任何地方訪問,因此它的方法也可以訪問。
其中 process.nextTick() 方法用于將函數(shù)的執(zhí)行推遲到下一個事件循環(huán)迭代。
瀏覽器 JavaScript 為我們引入了 setTimeout() 等函數(shù),以便在不久的將來延遲任務。該函數(shù)的作用是:獲取一個回調(diào)函數(shù)和一個表示回調(diào)函數(shù)執(zhí)行時間的數(shù)值,以毫秒為單位。
瀏覽器 JavaScript 為我們引入了 setTimeout() 等函數(shù),以便在不久的將來延遲任務。該函數(shù)的作用是:獲取一個回調(diào)函數(shù)和一個表示回調(diào)函數(shù)執(zhí)行時間的數(shù)值,以毫秒為單位。
setTimeout(callback, 0)
在 Node.js 中,事件循環(huán)的每次迭代都稱為一個記號。為了計劃在事件循環(huán)的下一次迭代中調(diào)用回調(diào)函數(shù),我們使用 process.nextTick()。它只接受一個沒有時間限制的回調(diào),因為它將在事件循環(huán)的下一次迭代中執(zhí)行。
process.nextTick(callback)
setTimeout() 和 process.nextTick() 之間的區(qū)別在于 process.nextTick() 函數(shù)特定于 Node.js 事件循環(huán)。
setTimeout() 使用 JavaScript 運行時調(diào)度自己的事件隊列。當使用 process.nextTick() 時,事件循環(huán)在單個迭代中處理事件隊列中的事件后,與之關聯(lián)的回調(diào)函數(shù)將立即運行。與 setTimeout() 相比,它更快,因為隊列與 setTimeout() 或 JavaScript 運行時關聯(lián)。
function cb() {
console.log('在下一次迭代中處理')
}
process.nextTick(cb)
console.log('在第一次迭代中處理')
// result
// 在第一次迭代中處理
// 在下一次迭代中處理
上面的代碼片段是 process.nextTick() 工作原理的一個示例。運行后,您會發(fā)現(xiàn),第二個 console.log 打印在與函數(shù) cb() 關聯(lián)的 console.log 之前。