节点异步 - 工作异步方法在async.parallel内返回undefined

时间:2016-06-28 17:00:38

标签: javascript node.js undefined async.js

基本上我有一个方法从API获取值并且有效,但在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);
});

1 个答案:

答案 0 :(得分: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);
    });
  }