API返回数据,但是在未定义的对象中。发生了什么事?

时间:2018-03-20 16:57:23

标签: javascript node.js api express asynchronous

我正在使用httpsasync同时拨打两个电话。作为回报,我得到两个对象,然后我放入一个数组。这就是我打电话的方式:

if (req.user.isPremium == false) {
  // Free user - Single report
  let website = req.body.website0;
  let builtWithCall = `https://api.builtwith.com/free1/api.json?KEY=key&LOOKUP=${website}`;
  let pagespeedCall = `https://www.googleapis.com/pagespeedonline/v4/runPagespeed?url=https://${website}&strategy=mobile&key=key`;
  // curl 'https://www.googleapis.com/pagespeedonline/v4/runPagespeed?url=https://georgiancollege.ca&strategy=mobile&key=AIzaSyDqOAEXV6WrNioBeOA76GOWzDSX2FvS--0'
  var calls = [];
  calls.push(function(callback) {
    // first call
    var results;
    https.get(builtWithCall, function(resource) {
      resource.setEncoding('utf8');
      resource.on('data', function(data) {
        results += data;
        // console.log(data);
      });
      resource.on('end', function() {
        callback(null, results);
      });
      resource.on('error', function(err) {
        callback(err);
      });
    });
  });
  calls.push(function(callback) {
    // second call
    var results;
    https.get(pagespeedCall, function(resource) {
      resource.setEncoding('utf8');
      resource.on('data', function(data) {
        results += data;
      });
      resource.on('end', function() {
        // var j = JSON.parse(results);
        // console.log(j.kind);
        callback(null, results);
      });
      resource.on('error', function(err) {
        callback(err);
      });
    });
  });
} else {
  // Premium user - comparison report
  let websites = [];
}
async.parallel(calls, function(err, results) {
  if (err) {
    console.log(err);
  }
  // console.log('async callback ', results);
  res.render('reports/report', {
    title: 'Report',
    data: results.filter(x => x != null),
    user: req.user,
  });
});

网站变量来自视图。

现在。当我在视图中打印出来时,我得到了这个: enter image description here

这很酷,但我需要获取属性,以生成用户友好的报告。我尝试将parsing转换为JSON,但它只是将意外值undefined抛出为0' ...这意味着异步调用将其返回为未定义。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

好吧,你似乎在做一些奇怪的事情:你定义一个results var,它是undefined,然后你做results += data。这会导致resultsundefined {<whichever-data-is>}。这就是为什么你在页面中有'未定义'的原因。不要使用+=,只需使用=,或初始化resultsvar results = '';

我并没有完全通过分配或将data附加到另一个变量而不仅仅是返回它而得到你要做的事情,因为结果只在它定义的函数中被分配一次。