尝试在nodejs中进行非阻塞,我做了如下代码:循环数组中的元素,对于每个元素," sleep"记录元素之前的一段时间。预计所有console.log都应该执行得非常接近,因为睡眠不会阻塞,但实际上并不是这样:这里出错了?
var data = [];
for (var i = 0; i <= 100; i++) {
data.push(i);
}
function sleep(milliSeconds, callback) {
var startTime = new Date().getTime();
while (new Date().getTime() < startTime + milliSeconds);
}
var print = function(content) {
sleep(1000, function(){
callback();
});
console.log(String(content) + ': ' + String((new Date()).getTime()));
};
for (var item in data) {
print(item);
}
答案 0 :(得分:0)
while
方法中的sleep
循环正在阻止。 NodeJS有一个built in method。此外,您需要在回调内登录,而不是在睡眠呼叫后立即登录。更新的代码可能如下所示:
var data = [];
for ( var i = 0; i <= 100; i++ ) {
data.push( i );
}
var printContent = function( content ) {
//use built-in method to run function after 5000 milliseconds
setTimeout( function() {
console.log( String( content ) + ': ' + String( ( new Date() ).getTime() ) );
}, 5000 );
};
//different way to loop over an array, better than var...in for the Array type
data.forEach( function( item ) {
printContent( item );
} );