【发布时间】:2020-04-17 20:44:18
【问题描述】:
我正在学习在线课程的反应,但我在跟随讲师时遇到了问题。在使用 Promise 处理从服务器检索数据的错误时,我有以下代码将操作分派到我的商店:
export const fetchPromos = () => (dispatch) => {
dispatch(promosLoading());
return fetch(baseUrl + 'promotions')
.then(response => {
if (response.ok) {
return response;
} else {
var error = new Error('Error ' + response.status + ': ' + response.statusText);
error.response = response;
throw error;
}
},
error => {
var errmess = new Error(error.message);
throw errmess;
})
.then(response => response.json())
.then(promos => dispatch(addPromos(promos)))
.catch(error => dispatch(promosFailed(error.message)));
}
在我关闭我的 json-server 或故意从服务器请求错误资源并重新加载我的应用程序后,我在浏览器中收到 UnHandled Rejection 错误,而不是我定义的错误。讲师似乎正确地看到了错误消息。我错过了什么吗?
【问题讨论】:
-
我无法理解它与我的代码的关系。您能否指出这个特定代码的错误在哪里,因为它似乎对教师有用。
-
未处理的拒绝中包含的错误是什么?这是您期望来自失败的
fetch的错误,还是其他错误?可能是您的promosFailed函数由于某种原因或类似的原因抛出错误。如果.catch中的回调由于某种原因抛出错误,您将收到未处理的拒绝。 -
好吧,我打开控制台看了看。正在正确调用 promosFailed 函数,并显示错误消息“无法获取”(它应该出现在组件的位置)。我在实际组件中有一个简单的 if -else 条件渲染。在这个组件中,它没有认识到它作为道具接收到的错误应该被显示,而是试图显示导致未定义属性错误的图像。
-
好的,所以基本上,问题不在此代码中。附带说明一下,第一个
.then上的error =>处理程序似乎是完全多余的。您只是发现了一个错误,创建了一个与原始错误消息相同的新错误,然后抛出了新错误。您可以完全删除该处理程序并具有相同或更好的行为。 -
@JLRishe Cheers 想通了。
标签: reactjs promise request fetch fetch-api