Nodejs迭代计数误解

Nodejs iteration count misunderstanding

我有一组数据,其中包含附加了 table 的人。 tables 可以有任意数量的行。对于每一行,我想打印出这个人和 table 的行信息。在第一个脚本中,我在编写每个 table 行之前迭代了一个行数。这样做,每 table 行的行数总是正确的。

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 只会随着每个人更新,而不是每个人的每个 table 行。因此,如果第一个人有三行,则每一行的 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 应该以任何一种方式在每一行之后迭代,但这种方式不起作用。我在这里错过了什么?

fs.appendFile() 不是阻塞,它是异步的。 fs.appendFileSync() 正在阻塞。

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

如果你想 运行 一次只执行一个异步操作,你可以使用 async.eachSeries()async.eachLimit(),你可能会在此处执行此操作,以便你可以控制附加内容的顺序到文件。