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()
,你可能会在此处执行此操作,以便你可以控制附加内容的顺序到文件。
我有一组数据,其中包含附加了 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()
,你可能会在此处执行此操作,以便你可以控制附加内容的顺序到文件。