我开始学习 Node.js,我正在尝试使用 Express 框架构建一个应用程序,该应用程序将查询 Coinbase API 并获取有关比特币价格的数据。
虽然我一直在努力解决一件事,但因为我是 Node 上的回调函数的新手,所以它没有帮助。
我能够完全查询 API 并获取数据,但是当以某种方式返回价格时,它总是返回为“未定义”。
我之前在使用不使用回调的简单查询时遇到过这个问题,所以我认为这是与缺少回调有关。但是,我现在仍然遇到同样的问题,并且我已经尝试了很多次迭代。我似乎找不到解决办法。任何帮助,将不胜感激。
var url = 'https://api.coinbase.com/v2/prices/spot?currency=USD';
function makeCall (url, callback) {
https.get(url,function (res) {
res.on('data', function (d) {
callback(JSON.parse(d));
});
res.on('error', function (e) {
console.error(e);
});
});
}
function handleResults(results){
return Number((results.data.amount))*14.5;
}
console.log(makeCall(url, function(results){
handleResults(results);
}));
最佳答案
makeCall()
实际上并没有返回任何东西。所以当你打电话时:
console.log(makeCall(url, function(results){
handleResults(results);
}));
您正在将 makeCall()
的立即返回值(未定义
)写入控制台。 handleResults()
的返回发生得太晚,console.log()
无法获取。
这需要一点时间来适应。但是你需要确保当你需要一个来自异步回调的值时,你等待访问它。例如,这会起作用:
function handleResults(results){
console.log(Number((results.data.amount))*14.5;)
}
学习使用 promises 可以使其中的一些内容更直观、更易于阅读。
使用 promises 你可以这样写:
const https = require('https')
var url = 'https://api.coinbase.com/v2/prices/spot?currency=USD';
function makeCall (url) {
return new Promise((resolve, reject) => {
https.get(url,function (res) {
res.on('data', function (d) {
resolve(JSON.parse(d));
});
res.on('error', function (e) {
reject(e)
});
});
})
}
function handleResults(results){
return Number((results.data.amount))*14.5;
}
makeCall(url)
.then(function(results){
console.log(handleResults(results))
})
.catch(console.log)
关于javascript - Node JS : Returning Data with Callback Function from API using http,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47242739/