2015-09-17 3 views
0

У меня есть эта функция:Как вызвать функцию async.map с помощью итератора с несколькими аргументами?

_get(url, param, function(err, body, res) { 
    /* do something */ 
}); 

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

Итак, я решил попробовать с async.map, как указано в документации имеет следующее определение:

map(arr, iterator, [callback])

Где iterator должно быть что-то вроде iterator(item, callback) Так, в данный момент Я вижу, что моя функция она не совместима, так что для этого вопроса я пытался решить, как этот

var fn = function(param, callback) { 
    return _get(url, param, callback); 
}; 

И когда я выполнил с async.map я ожидал, чтобы получить слитые результаты как этого

async.map(scope, fn, function(err, results) { 
    /* handle results */ 
}); 

Но results возвращается undefined. Я подозреваю, потому что return внутри fn, который вводит в заблуждение async.map.

Что мне изменить или исправить здесь?

ответ

1

То, что return не влияет на async.map. Я думаю, проблема связана с сигнатурой обратного вызова. Предполагая scope является массив, в котором у вас есть param значения, следующие должны запустить функцию на те значения и обеспечивают массив в results - при условии, _get называет свою анонимную функцию обратного вызова без ошибок:

async.map(scope, function(param, cb) { 

    _get(url, param, function(err, body, res) { 
     if (err) return cb(err); 
     /* do something */ 
     cb(null, /* whatever you want to pass on to final callback */); 
    }) 
}, 
function(err, result) { 
    if (err) // handle err 

    // result is array of values from _get's callback 
}) 
Смежные вопросы