我不知道如何使用 JS Promise 来解决这种情况。
假设我有一些文章,我想发送补丁请求来更新它们。我每篇文章发送一个请求。如果一篇文章的请求成功,那么我会更新该文章,但如果请求失败,那么我会以不同的方式更新该文章。另外,我想向用户显示一条消息,告知所有文章是否已正确更新。
这不是我的真实场景,这可能是一个奇怪的例子。但这就是我想在我的 React 应用程序中实现的目标。
这是我现在正在尝试做的事情:
const saveArticles = articles => {
const promises = [];
articles.forEach(article => {
const promise = axios
.patch('/articles', article)
.then(() => updateArticleUi(article))
.catch(() => updateArticleUiWithError(article));
promises.push(promise);
});
Promise.all(promises)
.then(() => tellTheUserThereWasNoErrors())
.catch(() => tellTheUserThereWasSomeErrors());
};
这不起作用,因为 Promise.all
始终执行 then
回调,无论所有 Promise 是否成功。
谢谢!
最佳答案
您的 updateArticleUi
和 updateArticleUiWithErrors
应该具有各自的返回值,以便您在查看结果数组时区分是否存在错误:
function updateArticleUi(article) {
…
return {success: true};
}
function updateArticleUiWithError(article, error) {
…
return {success: false};
}
function saveArticles(articles) {
const promises = articles.map(article => {
return axios.patch('/articles', article).then(() =>
updateArticleUi(article)
, err =>
updateArticleUiWithError(article, err)
);
});
return Promise.all(promises).then(results =>
if (results.every(res => res.success)) {
tellTheUserThereWasNoErrors();
} else {
tellTheUserThereWasSomeErrors();
}
});
}
关于javascript - 如何处理 Promise 数组 then/catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52259832/