gpt4 book ai didi

javascript - 如何拒绝 then 中的 Promise

转载 作者:行者123 更新时间:2023-12-03 04:15:18 25 4
gpt4 key购买 nike

如果任何一个 promise 以干净的方式失败,我希望能够拒绝整个 promise 链。我想“捕获”此拒绝并发送错误通知。我已经实现了以下代码:

let reportMetaData = api.ajaxGet(api.buildV3EnterpriseUrl('reports' + '/' + params.report_id))
.catch(error => {
if (error.status === constants.HTTP_STATUS.GATEWAY_TIMEOUT) {
this.notify.error(this.translate('reports.report_timedout'), this.translate('reports.report_timedout_desc'));
} else {
this.send('error', error);
}
});

let aggregateData = reportMetaData.then(success => {
try {
return api.xmlRequest('GET', success.aggregationUrls.elements[0].url);
} catch (error) {
return Promise.reject();
}
}).then(rawData => {
try {
return JSON.parse('{' + rawData + '}');
} catch (error) {
return Promise.reject();
}
}, error => Promise.reject(error));

let aggregateReport = aggregateData.then(data => {
if (!data || !data.report) {
return Promise.reject();
}
return data.report;
}).catch(error =>{
this.notify.error(this.translate('reports.report_timedout'), error);
});

正如你所看到的,它非常困惑和复杂。有什么办法可以简化这个过程吗?如果有人 promise 失败,我想要最简单的方法来拒绝整个 promise 失败。我如何从 then 函数内部做到这一点?另外,似乎抛出的错误一直作为 Uncaught Error 一直冒泡到 chrome 控制台。为什么我抓到了它还是冒泡?

最佳答案

您需要使用 Promise.all() 并提供 Promise 数组作为输入参数。如果其中一项 promise 失败,则所有 promise 都将无法兑现。这里是文档:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

这里有一篇关于 SO 的文章,您可以在其中阅读有关它们的信息:

When to use promise.all()?

关于javascript - 如何拒绝 then 中的 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44168914/

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