困惑 | API 请求失败时,Redux saga 不会抛出任何错误
Confusion | Redux saga does not throw any errors when API request fails
我有一个传奇:
function* sagaOne() {
try {
yield all(users.map((user) => call(sagaTwo, user));
console.log('test'); // being called even if the promise above rejected!
} catch (error) {
// stuff
}
}
上方的 saga 在 yield all
效果中调用下方的 saga。
function* sagaTwo() {
try {
yield call(api); // some api call that fails
} catch (error) {
// stuff
}
}
我的问题:即使 api 请求失败,sagaOne 中的 console.log 也会被调用!
为什么会这样?即使 api 抛出 422 错误并且 sagaTwo
抛出错误,sagaOne
会继续流程并且不会捕获错误。为什么?!
编辑:我使用 axios 进行 http 请求
这是正常的 try catch 行为 - 您已经捕获了错误,即您正在处理错误,因此代码执行会恢复。
因此,要么删除 sagaTwo
catch 块,要么在 catch 块中出现 handling/logging 错误后,在 catch 块中抛出一个 new Error
。这样你就不会看到日志test
打印
您正在尝试捕获同一个错误两次,请从 sagaTwo 中删除捕获或从其捕获中抛出错误,以便 sagaOne 可以再次捕获它。
我有一个传奇:
function* sagaOne() {
try {
yield all(users.map((user) => call(sagaTwo, user));
console.log('test'); // being called even if the promise above rejected!
} catch (error) {
// stuff
}
}
上方的 saga 在 yield all
效果中调用下方的 saga。
function* sagaTwo() {
try {
yield call(api); // some api call that fails
} catch (error) {
// stuff
}
}
我的问题:即使 api 请求失败,sagaOne 中的 console.log 也会被调用!
为什么会这样?即使 api 抛出 422 错误并且 sagaTwo
抛出错误,sagaOne
会继续流程并且不会捕获错误。为什么?!
编辑:我使用 axios 进行 http 请求
这是正常的 try catch 行为 - 您已经捕获了错误,即您正在处理错误,因此代码执行会恢复。
因此,要么删除 sagaTwo
catch 块,要么在 catch 块中出现 handling/logging 错误后,在 catch 块中抛出一个 new Error
。这样你就不会看到日志test
打印
您正在尝试捕获同一个错误两次,请从 sagaTwo 中删除捕获或从其捕获中抛出错误,以便 sagaOne 可以再次捕获它。