javascript - API 返回数据,但在 undefined object 中。这是怎么回事?

标签 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,
  });
});

网站变量来自 View 。

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

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

我该如何解决这个问题?

最佳答案

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

通过分配或附加 data,我不完全明白您要做什么到另一个变量而不是仅仅返回它,但是,因为结果只在它定义的函数中分配一次。

关于javascript - API 返回数据,但在 undefined object 中。这是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49390058/

相关文章:

javascript - 单击时显示复选框数据

node.js - 如何检查属性是否在 sequelize 中具有值

javascript - 请求返回 unicode 替换字符

java - Z3 的 Java 插值 API 似乎返回错误的插值

xml - 在 Angular 5 中使用 XML 数据发出 Post 请求

javascript - 检查 JavaScript 中数组、对象、字符串和数字等数据类型的空值

javascript - 如果我通过 javascript 设置不透明度,CSS 悬停事件将被取消

javascript - 在表单提交时格式化 JSON

node.js - 使用 Nodejs 和 Mongodb 访问 EJS 文件中 App.js 中声明的函数

javascript - 使用 Loop 时,Darksky 图标不会显示