gpt4 book ai didi

javascript - 获取 promise - 返回 500 内部服务器错误

转载 作者:行者123 更新时间:2023-11-30 09:39:45 24 4
gpt4 key购买 nike

我正在尝试处理 fetch 中的 500 个内部服务器错误。如果发生内部错误,服务器会响应一条消息。我想提取该消息。

const req = new Request(url, {
method: node.method,
mode: 'cors',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body),
});
fetch(req)
.then((response) => {
if (response.status === 500) {
// res.json extracts the body from the response as a promise, chain
// .then on it and throw an error to be caught in the lower catch.
response.json()
.then((json) => {
const { message, stackTrace } = json;
throw new ServerException(message, stackTrace); // note 1
})
.catch((error) => {
return Promise.reject(RawException(error)); // note 2
});
} else {
return response.json();
}
})
.then((json) => { // note 3
dispatch(stopLoading());
dispatch(recieveResponse(typeOfRequest, json));
})
.catch((e) => {
dispatch(stopLoading());
dispatch(responseError());
dispatch(showError(e.message));
});
};

我的问题是提取响应的主体会创建一个新的 promise ,我无法拒绝内部 promise 的外部 promise 。

注1触发了inner promise的catch方法。在 catch 内部,我尝试抛出另一个错误,但它似乎不起作用。如果我在第二行上 throw new RawException(error) ,则什么都不会发生,并且第三行上的 then 方法会触发。如果我像我在提供的代码中那样返回一个被拒绝的 promise ,那么仍然会触发,但 json 是未定义的。

我该怎么做?

最佳答案

解决方案不是嵌套 promise,而是解析/返回外部 promise 的 .then 和内部 promise 的结论。

if (response.status === 500) {
response.json() // response.json returns a promise, we chose to do nothing with its
.then((json) => { // conclusion
const { message, stackTrace } = json;
throw new ServerException(message, stackTrace); // note 1
})
.catch((error) => {
return Promise.reject(RawException(error)); // note 2
});
} else {
return response.json();
}

应该变成

if (response.status === 500) {
return response.json() // return the result of the inner promise, which is an error
.then((json) => {
const { message, stackTrace } = json;
throw new ServerException(message, stackTrace);
});
} else {
return response.json();
}

如果首选该语法,也可以删除 else 子句。 ESLint 提示 else 很浪费,但我更喜欢它使代码分支明确的方式。

关于javascript - 获取 promise - 返回 500 内部服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41729602/

24 4 0
文章推荐: javascript - 在 PouchDB 中记住登录数据
文章推荐: javascript - 对象数组,过滤掉带 0 的值
文章推荐: javascript - 如何将 <script></script> 附加到
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com