在我的功能结束之前我无法达到我的价值..我尝试了回调,但它似乎不起作用..
{{1}}
提前多多感谢
答案 0 :(得分:0)
我根据您的代码编写了一个独立的示例:
var http = require('http'),
https = require('https');
http.createServer(function(req, res) {
// You can largely ignore the code above this line, it's
// effectively the same as yours but changed to a standalone
// example. The important thing is we're in a function with
// arguments called req and res.
var url = 'https://api.coindesk.com/v1/bpi/currentprice.json';
var request = https.get(url, function(response) {
var body = '';
response.on('data', function(chunk) {
body += chunk;
});
response.on('end', function() {
// TODO: handle JSON parsing errors
var btcValue = JSON.parse(body);
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify({
btcValue: btcValue
}));
});
});
request.on('error', function(e) {
console.error(e);
});
// Runs this example on port 8000
}).listen(8000);
最重要的变化是将处理我们的响应(res
)的代码移动到coindesk响应的'end'
侦听器中。对coindesk的调用是异步的,因此在我们尝试对其进行操作之前,我们必须等待'end'
事件。
在构建JSON时,您引用了两次名为response
的变量。您的代码没有定义response
,但我认为它应该与调用coindesk的btcValue
相关联。我不确定你想要什么,所以我只是将btcValue
包裹在另一个对象中以供演示。
在您的原始代码中,您有这一行:
require('https').get(url, function(res, btcValue){
你称之为btcValue
的第二个论点并不存在,所以它只会设置为undefined
。
我已将send
更改为end
,但这并不是一个重大变化。我假设您正在使用Express(提供send
方法)而我的例子不是。