API 返回数据,但在未定义的对象中。这是怎么回事?
Posted
技术标签:
【中文标题】API 返回数据,但在未定义的对象中。这是怎么回事?【英文标题】:API returns data, but in an undefined object. What's going on? 【发布时间】:2018-08-29 14:41:44 【问题描述】:我正在使用https
和async
同时拨打两个电话。作为回报,我得到两个对象,然后我将它们放入一个数组中。这就是我打电话的方式:
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>
。这就是为什么您在页面中有“未定义”的原因。不要使用+=
,直接使用=
,或者初始化results
:var results = ''
;
我并不能完全理解您通过分配或附加data
到另一个变量而不是仅仅返回它来做的事情,因为结果只在它定义的函数中被分配一次。
【讨论】:
我想不出任何办法来退货。你能举个简单的例子吗? 只是callback(null, data)
而不是callback(null, results)
?
我会调查的。谢谢!以上是关于API 返回数据,但在未定义的对象中。这是怎么回事?的主要内容,如果未能解决你的问题,请参考以下文章
在 React 中,我的 POST 获取请求在桌面上有效,但在 iPad 上的 Chrome 上无效,这是怎么回事?
该复选框在未选中时不能返回 False,但在选中时可以返回 True
vs2010里编译opencv程序运行后,看不见图像,但在命令行下运行,图像又可以看见。。请问这是怎么回事?