节点JS:使用http从API返回具有callback函数的数据
我开始学习Node.js,我试图用Express框架构build一个应用程序,它将查询Coinbase API并获取比特币价格的数据。
我一直在努力,但是因为我对节点上的callback函数很陌生,所以没有任何帮助。
我能够完全查询API并获取数据,但是当它以某种方式返回价格时,它总是以“未定义”的forms返回。
我之前遇到过这个问题,那就是没有使用callback函数的简单查询,所以我认为这是因为缺lesscallback函数。 不过,我现在仍然遇到同样的问题,我尝试了很多次迭代。 我似乎无法find解决scheme。 任何帮助,将不胜感激。
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()
(这是undefined
)的立即返回值到控制台。 你的handleResults()
的返回发生得太迟了, console.log()
无法得到。
这需要一点习惯。 但是,您需要确定何时需要asynchronouscallback的值,您需要等待访问它。 例如,这将工作:
function handleResults(results){ console.log(Number((results.data.amount))*14.5;) }
学习使用承诺可以使一些更直观,更易于阅读。
使用承诺,你可以这样写:
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)
- 由于asynchronousnodejs,无法将数据添加到数组中
- NodeJS – 如何发送一个variables嵌套callback? (MongoDB查找查询)
- aws-lambda-nodejs:如何使用callback函数来返回我在aws-console中打印的值?
- callback后代码的最佳做法
- 节点js +多个嵌套的内部函数与callback
- 我怎样才能做callback,需要它的子function的信息
- 如何防止Twitterstream中的callback触发每个新的tweet?
- JavaScript函数返回节点js中未定义的值
- 如何处理callback函数中的响应(例如nodejs中的cradle)