【发布时间】:2017-10-07 13:09:48
【问题描述】:
我通过承诺发出多个请求,获取一系列股票的历史定价数据。
因为响应可能不会以相同的顺序返回,所以我需要一种方法来知道哪个响应对应于哪个请求。返回的响应没有任何识别信息。
这是一个响应的样子:
{
history: {
day: {
date: '1996-01-02',
open: 61.4063,
close: 63.6719,
high: 63.6875,
low: 59.6406,
volume: 10507600
},
...
}
}
这是我的要求:
var promises = [];
var symbols = ['MSFT', 'AAPL', 'GOOGL', 'FB', 'NVDA'];
symbols.forEach(function(symbol) {
promises.push(axios.get('https://sandbox.tradier.com/v1/markets/history', {
headers: {
Accept: 'application/json',
Authorization: 'Bearer ' + tradierACCESSTOKEN
},
params: {
symbol: symbol,
interval: 'daily',
start: '2012-01-01'
}
}));
});
axios.all(promises)
.then(function(responses) {
responses.forEach(function(response) {
var data = response.data;
// how do i know which response corresponds with the requested stock?
});
})
.catch(error => console.log(error));
【问题讨论】:
-
axios中的axios.all()是什么? -
我不明白为什么许多人过着艰难的生活并尝试在列表中使用承诺。更好地使用
async它更容易,代码更具可读性。试试async.map。 caolan.github.io/async/docs.html#map -
@FrankRoth 那会更容易吗?你仍然有一个集合,你仍然有
iteratee,你仍然有一个结果处理程序。您仍然需要本质上相同的代码,只是以不同的方式调用它。而async.map甚至不使用承诺,你好回调地狱......
标签: javascript ajax promise axios