【发布时间】:2016-05-31 05:13:38
【问题描述】:
请原谅我,但作为一个非常新的开发人员,我看不出这与所提到的问题完全相同。我不知道 ajax 是什么,我当然不明白如何调整建议的解决方案以适应我的情况。
我正在编写一个非常简单的节点应用程序,它从 web api 获取股票价格,从另一个 web 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 语句,但这也不起作用。
有人可以帮忙吗?
【问题讨论】:
-
异步导致异步:还没有价值。推广模式all;最好使用 Promises 或 ReactJS - 根据需要使用显式回调来粘合到节点本身(但有很好的 promisify-wrappers)。
-
对于拥有数千个帖子的你们来说,这可能看起来像是一个副本,但对于一个拥有 15 个帖子的全新开发人员来说,这就像比较一个苹果和一个橙子。在做出这样的决定之前,花点时间回忆一下作为一名新开发人员的感受如何。因此,这可能与另一篇帖子相似,这并不意味着我可以通过该帖子回答我的问题,并且我的问题仍然需要帮助。
-
编程涉及识别问题、概括解决方案以及将知识应用于具体情况。如果在阅读了其他已发布的回复后仍有问题/问题,则要求对某些问题进行具体说明 - 最好提供支持性参考。超过 2000 票的问题解释了确切的问题并导致下一步。最好不要太个人化:}
标签: javascript node.js asynchronous return