【发布时间】:2017-09-25 15:34:54
【问题描述】:
我有一个触发事件以获取数据的 React 组件。这会导致动态数量的存储过程调用来获取数据,并且每次调用的数据都存储在完全不同的位置。然后,一旦收到所有数据并可用,我就需要重新渲染。我在 axios 中使用 Promise。
由于 axios 调用的次数是动态的,我正在构建一个数组并将其插入到axios.all 中,如下所示:
let promises = [];
for (let i = 0; i < requests.length; i++) {
promises.push(axios.get(request[i].url, { params: {...} }));
}
axios.all(promises).then(/* use the data */);
问题是每个 axios 请求返回的数据被添加到一个完全不同的位置的对象中。由于我无法将它们全部放在一个 then 中的正确位置(我怎么知道哪个响应在哪个位置?),我尝试做这样的事情:
let promises = [];
for (let i = 0; i < requests.length; i++) {
promises.push(
axios.get(request[i].url, { params: {...} })
.then(response => {myObject[request[i].saveLocation] = response.data;})
);
}
axios.all(promises).then(/* use the data */);
但是,这并没有像我预期的那样工作。每个get 之后的then 被执行,但直到then 附加到axios.all 之后才执行。显然这是一个问题,因为我的代码在将数据保存到对象之前尝试使用数据。
有没有办法为每个axios.get 调用单独的then 调用,该调用将在其对应的promise 解决后执行,然后有一个最终的then 仅在all 的承诺已解决,现在要使用已填充对象的数据吗?
【问题讨论】:
-
"我怎么知道哪个响应在哪个位置?" - they come out in the same order as they were passed in
-
我看不出这段代码有什么不工作的原因。
/* use the data */到底长什么样子?
标签: javascript promise axios