了解node.js中的非阻塞

时间:2014-06-25 16:33:37

标签: javascript node.js asynchronous

尝试在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);
}

1 个答案:

答案 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 );
    } );