API 返回数据,但在未定义的对象中。这是怎么回事?

Posted

技术标签:

【中文标题】API 返回数据,但在未定义的对象中。这是怎么回事?【英文标题】:API returns data, but in an undefined object. What's going on? 【发布时间】:2018-08-29 14:41:44 【问题描述】:

我正在使用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,
  );
);

网站变量来自视图。

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

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

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

我想不出任何办法来退货。你能举个简单的例子吗? 只是callback(null, data) 而不是callback(null, results)? 我会调查的。谢谢!

以上是关于API 返回数据,但在未定义的对象中。这是怎么回事?的主要内容,如果未能解决你的问题,请参考以下文章

在 React 中,我的 POST 获取请求在桌面上有效,但在 iPad 上的 Chrome 上无效,这是怎么回事?

游戏更新就出现发生致命错误Win32Error怎么回事

该复选框在未选中时不能返回 False,但在选中时可以返回 True

vs2010里编译opencv程序运行后,看不见图像,但在命令行下运行,图像又可以看见。。请问这是怎么回事?

Django Rest Framework在编辑用户时返回403 Forbidden,但在未以任何用户身份登录时工作

springMVC @valid 注解没有效果是怎么回事?