2015-05-10 4 views
3
async.each(spiders, function(){ 
    console.log('hi'); 
}, function(err) { 
    if(err) { console.log(err);} 
    else console.log('ok'); 
}); 

После регистрации «привет» асинхронный вызов не выполнил обратный вызов и не зарегистрировал «ok» или ошибки.async.each() окончательный обратный вызов не выполнен

Что не так в моем коде?

+1

Вы хотите использовать асинхронный 'forEach' или' _.each' – Bergi

ответ

8

async обеспечивает два важных параметра для вашей iterator функции: item и callback. Первый дает вам фактический элемент данных из массива, а второй - функцию, указывающую конец фактического метода. Заключительный обратный вызов (тот, который имеет журнал («ok»)) вызывается, когда каждый вызов итератора указывает на свой обратный вызов.

Так что ваш код должен быть что-то вроде этого:

async.each(spiders, function(item, callback) { 
    console.log('spider: ' + item); 
    callback(null); 
}, function(err) { 
    if (err) { 
    return console.log(err); 
    } 
    console.log('ok'); 
}); 

Параметр null означает, что нет никакой ошибки.

Также обратите внимание, что обработка ошибок, подобных этому, является лучшей практикой.

2

Цитируя документации async.each:

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

Вывод: вы забыли принять параметр обратного вызова и, следовательно, не назовите его.

Смежные вопросы