![](/img/trans.png)
[英]Creating a waiting function using process.nextTick or setImmediate - node.js
[英]Significance of using setImmediate() and process.nextTick() in Node.js
我正在學習 Node.js,並且很難理解setImmediate()
和process.nextTick()
的工作原理。 為了清楚地理解這些概念,我有三個程序,一個簡單的 node.js 程序,一個使用setImmediate()
和一個使用process.nextTick()
。 顯然,這三個人的行為方式不同。 如果有人能解釋這些程序在操作上的不同之處,並解釋使用這兩個計時器進行有效的 Node.js 編程的重要性,那將是非常有幫助的。
程序 1:(沒有setImmediate()
和process.nextTick()
)
var fs = require('fs');
function logCar(car, callback){
console.log("Saw a %s", car);
if(cars.length){
callback();
}
}
function logCars(cars){
var car = cars.pop();
logCar(car, function(){
logCars(cars);
});
}
var cars = ["Ferrari", "Porsche", "Bugatti",
"Lamborghini", "Aston Martin"];
logCars(cars);
var fileCheck = function(){
console.log('entered file operation');
fs.stat("fileio.js", function(err,stats){
if(stats)
console.log("file exists");
});
}
fileCheck();
結果:
Saw a Aston Martin
Saw a Lamborghini
Saw a Bugatti
Saw a Porsche
Saw a Ferrari
entered file operation
file exists
程序 1:(使用setImmediate()
)
var fs = require('fs');
function logCar(car, callback){
console.log("Saw a %s", car);
if(cars.length){
setImmediate(function(){
callback();
});
}
}
function logCars(cars){
var car = cars.pop();
logCar(car, function(){
logCars(cars);
});
}
var cars = ["Ferrari", "Porsche", "Bugatti",
"Lamborghini", "Aston Martin"];
logCars(cars);
var fileCheck = function(){
console.log('entered file operation');
fs.stat("fileio.js", function(err,stats){
if(stats)
console.log("file exists");
});
}
fileCheck();
結果:
Saw a Aston Martin
entered file operation
Saw a Lamborghini
file exists
Saw a Bugatti
Saw a Porsche
Saw a Ferrari
程序 2:(使用process.nextTick()
)
var fs = require('fs');
function logCar(car, callback){
console.log("Saw a %s", car);
if(cars.length){
process.nextTick(function(){
callback();
});
}
}
function logCars(cars){
var car = cars.pop();
logCar(car, function(){
logCars(cars);
});
}
var cars = ["Ferrari", "Porsche", "Bugatti",
"Lamborghini", "Aston Martin"];
logCars(cars);
var fileCheck = function(){
console.log('entered file operation');
fs.stat("fileio.js", function(err,stats){
if(stats)
console.log("file exists");
});
}
fileCheck();
結果:
Saw a Aston Martin
entered file operation
Saw a Lamborghini
Saw a Bugatti
Saw a Porsche
Saw a Ferrari
file exists
使用process.nextTick()
延遲的回調在任何其他 I/O 事件被觸發之前運行。
使用setImmediate()
,執行將在隊列中已經存在的任何 I/O 事件之后排隊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.