原谅我,但作为一个非常新的开发者,我没有看到这是如何与所提到的问题完全重复。我不知道ajax是什么,我当然不明白如何调整所提出的解决方案以适应我的情况。
我正在编写一个非常简单的节点应用程序,它从网络API获取股票价格,从另一个网络API获取货币转换价值,并将股票价格从美元转换为澳元。我把它完美地放在一个文件中,但是我已经选择将它拆分成几个模块以使其更容易。现在我已经打破了它:)
基本上我将希望查询的股票代码传递给我的GetStockPrice()函数,该函数然后执行必要的查询并在理论上返回结果.....
这就是我调用模块的方式:
var returned = GetStockPrice('AMZN');
console.log(returned);
返回值始终为10,因为我的GetStockPrice模块中没有更新。
以下是我模块中的代码:
var http = require('http');
var stockPrice = 10;
function GetStockPrice(ticker) {
var options = {
host: 'dev.markitondemand.com',
port: 80,
path: '/MODApis/Api/v2/Quote/json?symbol=' + ticker,
method: 'GET'
};
http.request(options, function(res) {
console.log('STATUS: ' + res.statusCode);
res.setEncoding('utf8');
res.on('data', function(chunk) {
const json = JSON.parse(chunk);
stockPrice = json.LastPrice;
});
}).end();
return (stockPrice)
};
module.exports = GetStockPrice;
我理解我做错了什么,http.request是异步运行的,所以当我的函数进入return语句时,异步调用还没有完成,所以我的返回值, stockPrice,仍然与我第一次初始化时相同。不幸的是,我不知道如何解决它。我尝试在http.request函数中移动return语句,但这也不起作用。
有人可以帮忙吗?
答案 0 :(得分:0)
您可以使用回调来获取异步函数的响应。
var http = require('http');
var stockPrice = 10;
function GetStockPrice(ticker, callback){
var options = {
host: 'dev.markitondemand.com',
port: 80,
path: '/MODApis/Api/v2/Quote/json?symbol=' + ticker,
method: 'GET'
};
http.request(options, function(res) {
console.log('STATUS: ' + res.statusCode);
res.setEncoding('utf8');
var stockPrice='';
res.on('data', function (chunk) {
stockPrice = stockPrice + chunk;
});
res.on('end', function(){
return callback(JSON.parse(stockPrice));
});
});
};
module.exports = GetStockPrice;
并且
GetStockPrice('AMZN', function(data){
console.log(data);
});
请原谅我,如果有任何错别字。