我有一组由附加表格的人组成的数据。表可以包含任意数量的行。对于每一行,我想打印出人和表的行信息。在第一个脚本中,我在写入每个表行之前迭代行计数。这样做,每个表行的行数始终是正确的。
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应该在每一行之后迭代,它不会以这种方式工作。我在这里缺少什么?
答案 0 :(得分:2)
fs.appendFile()
没有阻止,它是异步的。 fs.appendFileSync()
正在阻止。
async.each()
并行运行操作,而不是一次运行一个,因此rowCount
增加的时间在两个代码示例中会有所不同。
如果您希望在此处只执行一次异步操作,则可以使用async.eachSeries()
或async.eachLimit()
,以便您可以控制将事物附加到文件中的顺序。