包含循环的函数在NodeJS中应该是异步的吗?

时间:2014-01-28 15:47:44

标签: javascript node.js

我是NodeJS的新手,我不确定如何声明以下函数。该函数仅包含一个生成字符串的for循环。没有进行“重量级”计算。

变式1:

function getRandomString(arg) {
    for (var i = 0; i < 100; i++) {
        // ...
    }

    return string;
}

var randomString = getRandomString(arg);
// ... an async code which will use the string

变体2:或者我应该将其设为异步(异步样式)?它看起来像这样:

function getRandomString(arg, callback) {
    for (var i = 0; i < 100; i++) {
        // ...
    }

    callback(string);
}

getRandomString(arg, function(randomString) {
    // Async code...
});

2 个答案:

答案 0 :(得分:2)

  

或者我应该让它异步?所以像这样:

function getString(arg, callback) {
    for(var i = 0;i<100;i++) {
        // ...
    }
    callback(string);
}

没有。该代码仍然运行synchronousls,只有奇数回调样式才能返回结果。由于JS不进行尾调优化或具有延续支持,因此它只是引入了厄运金字塔而没有任何好处。

除非你真的使它异步(setTimeoutnextTick等),否则不要使用它,例如推迟单循环迭代。

答案 1 :(得分:0)

使它“异步”没有任何好处。实际上,代码将同步运行,getString方法仅在回调完成后退出。

你真正要做的唯一决定就是编码风格(你希望看起来异步与否)。

function getString(arg, callback)
{
    for(var i = 0;i<100;i++)
    {
        // ...
    }
    //Callback will execute synchronously, and you will wait here until it is complete
    callback(string);
}