【问题标题】:Trying out async.js for nodejs为 nodejs 试用 async.js
【发布时间】:2013-08-04 20:55:43
【问题描述】:

下面的代码有问题:

var async = require("async");

function sleep(milliseconds) {
    var start = new Date().getTime();
    for (var i = 0; i < 1e7; i++) {
        if ((new Date().getTime() - start) > milliseconds){
            break;
        }
    }
}

function hello(no){
    console.log(no);
    async.forEach(no,function print_list(x, callback){
        console.log("I am task number : ", x);
        var sleep_time = Math.floor((Math.random()*10)+1);
        console.log(sleep_time);
        sleep(sleep_time*1000);
    },function(err){if (err){console.log(err);}});
}

list = [];
for (var a = 1000; a > 0;a--){
    list.push(a);
};
hello(list);

在我看来,我希望每个这段代码不会互相阻塞,但我发现它仍然被视为同步代码。

我哪里做错了?

【问题讨论】:

    标签: javascript node.js async.js


    【解决方案1】:

    Node.js 是单线程的,您的睡眠功能正在接管 CPU。

    尝试使用 setTimeout 来获得一个更实际的例子来说明它是如何工作的。

    function hello(no){
        console.log(no);
        async.forEach(no,function print_list(x, callback){
            console.log("I am task number : ", x);
            var sleep_time = Math.floor((Math.random()*10)+1);
            console.log(sleep_time);
            // use setTimeout
            setTimeout( function() {}, sleep_time*1000);
        },function(err){if (err){console.log(err);}});
    }
    

    【讨论】:

      猜你喜欢
      • 2020-06-23
      • 2017-03-25
      • 1970-01-01
      • 2016-05-25
      • 2017-08-20
      • 2017-11-29
      • 1970-01-01
      • 2021-03-04
      • 2014-04-26
      相关资源
      最近更新 更多