2013-09-29 3 views
0

я следующий код, который использует async.jsasyncjs - eachSeries() не перебирать все элементы массива

var async = require('async'); 
var A = []; 

for(var i = 1; i < 100; i++) 
    A.push(i); 

async.eachSeries(A, function(item) { 
    console.log(item); 
}); 

я ожидал, чтобы напечатать число от 1 до 100, однако, когда я запускаю это выход только 1

Если я использую each() вместо eachSeries(), он печатает все цифры.

Итак, почему код не работает, а eachSeries() - это только серийная версия each()?

ответ

6

Функции итератора требуют 2 аргумента item и callback, callback необходимо вызвать после завершения итерации.

async.eachSeries(A, function(item, callback) { 
    console.log(item); 
    callback(); 
}); 
+0

Я думаю, что обратные вызовы не являются обязательными. Кроме того, если это проблема, это не должно работать с 'each()', потому что 'each()' принимает те же аргументы, что и 'eachSeries()' – Jatin

+0

Из документации: 'iterator (item, callback) - функция применяются к каждому элементу массива. Итератору передается обратный вызов (err), который должен вызываться после его завершения. Если ошибка не была выполнена, обратный вызов должен запускаться без аргументов или с явным аргументом null. ' – pNre

+0

Но тогда' eachSeries() 'также принимает функцию обратного вызова в качестве аргумента, правильно? Итак, почему это не нужно? – Jatin