首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nodejs迭代计数误区

Nodejs迭代计数误区
EN

Stack Overflow用户
提问于 2016-01-05 16:02:16
回答 1查看 65关注 0票数 0

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

代码语言:javascript
复制
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都是相同的。

代码语言:javascript
复制
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应该在每一行之后进行迭代,这样就不能这样工作了。我在这里错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-05 16:21:09

fs.appendFile()不是阻塞,而是异步。fs.appendFileSync()阻塞了。

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

如果希望一次只运行一个异步操作,可以使用async.eachSeries()async.eachLimit(),这样就可以控制附加到文件中的顺序。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34616006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档