2016-01-05 5 views
0

У меня есть набор данных, состоящих из людей с прикрепленными таблицами. Таблицы могут иметь любое количество строк. Для каждой строки я хотел бы распечатать информацию о персоне и таблице. В первом скрипте я повторяю счет строки перед написанием каждой строки таблицы. Выполняя это так, количество строк всегда правильно для каждой строки таблицы.Ошибки подсчета ошибок в Nodejs

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 будет одинаковым на каждом из них.

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 должен итерации после каждой строки в любом случае, бит ее не работает таким образом. Что мне здесь не хватает?

ответ

2

fs.appendFile() не блокирует, это асинхронно. fs.appendFileSync() блокируется.

async.each() работает параллельно, а не по одному, поэтому время вашего увеличения rowCount будет отличаться в ваших двух примерах кода.

Вы можете использовать async.eachSeries() или async.eachLimit(), если вы хотите запустить только одну операцию async в то время, которое вы, вероятно, делаете здесь, чтобы вы могли контролировать заказ, добавляются к файлу.

+0

Большое спасибо. Это очень многое для меня. – Elliot