将 request.https 响应获取到变量中
Getting the request.https response into a variable
今天我正在向Linode API发出这个请求。
var options = {
hostname: 'api.linode.com',
path: '',
port: 443,
method: 'GET'
}
var req = https.request(options, function(response) {
response.setEncoding('utf8');
response.on('data', function(d) {
body = JSON.parse(d.toString());
});
response.on('end', function() {
console.log(body);
});
}).end();
在此示例中,输出按预期工作。
但是,我需要将响应放入变量中,而不是将其记录到控制台。
var body = '';
var req = https.request(options, function(response) {
response.setEncoding('utf8');
response.on('data', function(d) {
body = JSON.parse(d.toString());
});
}).end();
console.log(body);
return body;
运行上面的代码,答案总是空的,因为看起来console.log()
函数或return
子句没有等待请求结束。
我使用 setTimeout( function() { console.log(body); }, 2000 )
函数解决了这个问题,但老实说,不能将其视为有效的解决方案,因为每个请求的超时都会有所不同。
我尝试的其他解决方案是while (!req.finished) {} console.log(body);
,但它也没有按预期工作。
最后,我尝试添加以下内容:
response.on('end', function() {
return body;
});
但也没有成功:(
也就是说,您是否有任何建议让此函数在返回 body
变量的值之前等待请求超时?
最简单的方法是将代码放在一个接受(至少)回调的函数中。您还需要缓冲来自所有data
事件的数据,因为您不能假设只有一个事件。例:
// you may want to add other parameters too depending on your needs of course ...
function linodeReq(cb) {
var options = {
hostname: 'api.linode.com',
path: '',
port: 443,
method: 'GET'
}
https.get(options, function(response) {
var buffer = '';
response.on('data', function(d) {
buffer += d;
}).on('end', function() {
var body;
try {
body = JSON.parse(buffer)
} catch (err) {
return cb(err);
}
cb(null, body);
}).setEncoding('utf8');
});
}
// then use it like ...
linodeReq(function(err, result) {
// check for `err` first ...
});
您还应该处理请求(和response
)对象上的error
事件,并在发生时将它们传递给回调。例如,如果无法解析主机名或出现其他连接错误,则可能会发生这种情况。
相关文章:
- 从javascript变量获取php会话
- 是否将Javascript变量保存为PHP变量?获取、发布、COOKIE
- 从动态变量获取数组
- PHP 和 Javascript:使用 Javascript 变量获取文件内容
- 如何从 php 变量获取值到我们的 javascript 文件中
- 从 javascript 变量获取 InnerHtml
- 如何使用此变量获取 typeahead.js 中输入的 id
- 使用参数变量获取传递给 ES6 箭头函数的参数
- 如何将此值作为变量获取
- Javascript-使用一个变量获取数组的一部分
- 无法使用AJAX将JS变量获取到PHP
- 从angularjs中的变量获取数据
- 使用jquery中的变量获取字段值
- 将变量获取到url并导航选定的变量
- 将Struts2 valuestack变量获取到JQuery
- Javascript-使用变量获取对象值
- 为每个变量获取一个新的随机数
- 从JavaScript中的第二个变量获取名为的变量的值
- 使用变量获取 JavaScript 值
- HTML选择列表-通过传递变量获取文本值