gpt4 book ai didi

javascript - Promise.all 在它所依赖的 Promise 之前完成

转载 作者:行者123 更新时间:2023-12-01 00:58:26 24 4
gpt4 key购买 nike

我有一个 API 请求列表,只有当所有请求都完成后我才会返回答案。我使用了 Promise.all 来实现这一点,但看起来 Promise.all 的 then 是在他想要等待的 promise 之前被触发的。我认为发生这种情况是因为我在发布请求中有一个获取请求。我怎样才能做到这一点?

这是一个react-redux项目。

if (devices) {
const APIArray = [];
devices.forEach(device => {
const data = {
id: device.id,
};
dispatch({ type: EDIT_DEVICE, payload: data });
APIArray.push(
axios
.post('/deploy/update', data)
.then(res => {
ApiUtils.get(`/deploy/device?deviceId=${data.id}`).then(response => {
console.log('1');
dispatch({ type: EDIT_DEVICE_SUCCESS, payload: { device: response.data } });
});
})
.catch(error => {
dispatch({ type: EDIT_DEVICE_FAIL, payload: { device: data, error: error } });
})
);
});

return Promise.all(APIArray)
.then(res => {
console.log('2');
dispatch({ type: UPDATE_DEVICES_SUCCESS, payload: res });
return res;
})
.catch(err => {
return err
);
}

expected: console.log('1')
console.log('1')
console.log('2')
actual: console.log('2')
console.log('1')
console.log('1')

最佳答案

你必须将内部 promise 返回到外部链:

 return ApiUtils.get(`/deploy/device?deviceId=${data.id}`).then(/*...*/);

通过返回它,外部 .then 返回的 promise 将被链接起来。

关于javascript - Promise.all 在它所依赖的 Promise 之前完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56327323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com