【发布时间】:2021-03-25 17:12:12
【问题描述】:
我正在循环数据以构建多个 axios 请求,并且在这个异步循环中等待一些数据。
当我这样做时,Promise.all 会在 .catch(errror => {}) 的其中一个请求引发错误之前解决,我故意提供了一个错误数据,因此请求会被捕获。
return new Promise((resolve) => {
let requestArr = [];
requestsData.forEach(async (data) => {
let waitForThisData = await someFunction(data.id);
requestArr.push(
axios
.post()
.then((response) => {})
.catch((error) => {})
);
});
Promise.all(requestArr).then(() => {
resolve(true);
});
});
我正在用 3 个请求对此进行测试,其中 1 个将被捕获。当我添加断点时,Promise.all 在转到其中一个请求之前已经解析。
如果我删除等待代码,那么我会得到预期的输出,在Promise.all 解析之前先捕获触发器。
那么为什么 Promise.all 在其中一个请求完成之前解决(错误并去捕获)?
【问题讨论】:
-
你的问题是“为什么
Promise.all在catch在forEach循环内被触发之前解决”?你想要的行为是什么? -
@codemonkey 对不起,是的。在我的问题中更清楚地说明了这一点。
-
您是否只是想知道为什么,或者您是否真的想在
Promise.all解决之前找出一种方法来捕获错误?关于前者,我没有太多要提供的东西,但如果是后者,我可以建议一些更改,以使您的代码以有意义的方式运行。 -
通过在上面的函数中包含控制台语句可能有助于发布您获得的输出,不确定我是否完全理解问题
-
@codemonkey 后者会很有帮助,谢谢。
标签: javascript promise async-await axios