gpt4 book ai didi

javascript - 如何处理 Promise 数组 then/catch

转载 作者:行者123 更新时间:2023-12-01 01:42:51 28 4
gpt4 key购买 nike

我不知道如何使用 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 是否成功。

谢谢!

最佳答案

您的 updateArticleUiupdateArticleUiWithErrors 应该具有各自的返回值,以便您在查看结果数组时区分是否存在错误:

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/

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