【问题标题】:Nodejs iteration count misunderstandingNodejs迭代计数误区
【发布时间】:2016-01-06 00:21:09
【问题描述】:

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

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 应该以任何一种方式在每一行之后迭代,有点它不以这种方式工作。我在这里错过了什么?

【问题讨论】:

    标签: node.js asynchronous async.js


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢。这让我明白了很多。
    猜你喜欢
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多