2013-11-22 2 views
2

фрагменты кода:Модуль NodeJS Async: как получить объект результатов в обратном вызове?

var async = require("async"); 

async.map([ 
    "a", 
    "b", 
    "c" 
], function(thing, callback) { 
    console.log(thing + "-something"); 
    callback(); 
}, 
function(err, results){ 
    if (err) return console.error(err); 
    console.log(results); 
}); 

Мои текущие результаты:

a-something 
b-something 
c-something 
[ undefined, undefined, undefined ] 

Мои желаемые результаты:

[ a-something, b-something, c-something ] 

Не могли бы вы, ребята, скажите мне, что я получаю неправильно? Как получить доступ к объекту результатов в обратном вызове?

ответ

4

Вы должны передать свой результат в callback() в качестве второго параметра (первый параметр должен быть ошибка, если таковая имеется):

var async = require("async"); 

async.map([ 
    "a", 
    "b", 
    "c" 
], function(thing, callback) { 
    var returnValue = thing + "-something"; 
    console.log(returnValue); 
    callback(null, returnValue); 
}, 
function(err, results){ 
    if (err) return console.error(err); 
    console.log(results); 
}); 
+0

Это работает! Спасибо, Олег. Я хотел беспокоить вас еще одним вопросом: я новичок в javascript и узле, и я считаю, что документация должна быть прочитана. Почему callback() также работает в отсутствии любого передаваемого аргумента. Не могли бы вы ссылаться на документацию, которая показывает обратный вызов (null, returnValue) – samol

+0

@SidneySidaZhang: Это раздел документов, на которые вы должны посмотреть: https : //github.com/caolan/async#maparr-iterator-callback. Причина callback() также работает, потому что JavaScript не является строгим с количеством параметров, переданных функции (любые параметры, которые не переданы, рассматриваются как 'undefined'). Асинхронная библиотека следует примеру и выбирает, чтобы быть расслабленной, требуя параметров, поэтому, если вы ничего не пропускаете, она предполагает, что нет ошибки, и, как вы видели, проходит неопределенный до последнего обратного вызова. –

+0

отличное спасибо! – samol

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