Nodejs迭代算错误

时间:2016-01-05 16:02:16

标签: node.js asynchronous async.js

我有一组由附加表格的人组成的数据。表可以包含任意数量的行。对于每一行,我想打印出人和表的行信息。在第一个脚本中,我在写入每个表行之前迭代行计数。这样做,每个表行的行数始终是正确的。

async.each(data.table, function(array, printCallback) {
    rowCount++;
    fs.appendFile(fileName, data.firstName + ' ' + data.lastName + ',' + data.email + ',' + data.bd + ',' + key + ',' + array[0] + ',' + array[1] + ',' + array[2].slice(0, array[2].indexOf(' ')) + '\n', function(err){
        if (err) { console.log(err); }
        printCallback();
    });
});

如果我将rowCount移动到appendFile()方法的回调中,则rowCount仅更新每个人,而不是每个人的每个表行。因此,如果第一个人有三行,则rowCount在每一行上都是相同的。

async.each(data.table, function(array, printCallback) {


    fs.appendFile(fileName, data.firstName + ' ' + data.lastName + ',' + data.email + ',' + data.bd + ',' + key + ',' + array[0] + ',' + array[1] + ',' + array[2].slice(0, array[2].indexOf(' ')) + '\n', function(err){
        if (err) { console.log(err); }
        rowCount++;
        printCallback();
    });
});

fs.appendFile不应该被阻止吗?并且async.each一次限制为一行,所以rowCount应该在每一行之后迭代,它不会以这种方式工作。我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

fs.appendFile()没有阻止,它是异步的。 fs.appendFileSync()正在阻止。

async.each()并行运行操作,而不是一次运行一个,因此rowCount增加的时间在两个代码示例中会有所不同。

如果您希望在此处只执行一次异步操作,则可以使用async.eachSeries()async.eachLimit(),以便您可以控制将事物附加到文件中的顺序。