2016-06-28 3 views
1

В принципе, у меня есть метод получения значений из API и работает, но внутри async.parallel перечисленные результаты не определены.Узел Async - рабочий метод async возвращает undefined внутри async.parallel

Вот метод:

function getNumberOfSharesFromFacebookApi(url ,callback) { 

    request(facebookApiUrl + url + '&format=json', function (error, response, body) { 
    let res = 0; 

    if (!error && response.statusCode == 200) { 
     try { 
     res = JSON.parse(body)[0]['total_count']; 
     } catch(err) { } 
    } 
    callback(res); 
    }); 
} 

Вот асинхронной вызов:

async.parallel ([ 
    callback => { 
    getNumberOfSharesFromFacebookApi(urlsToTest[0], callback); 
    }, 
    callback => { 
    getNumberOfSharesFromFacebookApi(urlsToTest[1], callback); 
    }, 
    callback => { 
    getNumberOfSharesFromFacebookApi(urlsToTest[2], callback); 
    }, 
    callback => { 
    getNumberOfSharesFromFacebookApi(urlsToTest[3], callback); 
    } 
], 
(err, results) => { 
    console.log(results); 
}); 
+0

Async.js ожидает, что вы будете использовать соглашение об обратном вызове узла, в котором первый аргумент означает ошибку. Функция 'getNumberOfSharesFromFacebookApi' не делает этого. – Bergi

ответ

1

на вашей функции запроса, поместите свой ответ в качестве 2-го аргумента функции обратного вызова. запрос использует обратные вызовы стиля узла, в которых первый аргумент является ошибкой.

function getNumberOfSharesFromFacebookApi(url ,callback) { 
    request(facebookApiUrl + url + '&format=json', function (error, response, body) { 
     if(error) return callback(error); //callback on error 
     let res = 0; 

     if (!error && response.statusCode == 200) { 
     try { 
      res = JSON.parse(body)[0]['total_count']; 
     } catch(err) { } 
     } 
     callback(null, res); 
    }); 
    } 
Смежные вопросы