2016-06-28 75 views
1

基本上我有一个方法从一个API中获取值并工作,但在async.parallel中,列出的结果都是未定义的。节点异步 - 工作异步方法返回内部未定义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

您所查询的功能,将作为回调的第二个参数的响应。请求使用节点样式回调,其中第一个参数是错误。

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); 
    }); 
    }