困惑 | 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打印

see demo here

您正在尝试捕获同一个错误两次,请从 sagaTwo 中删除捕获或从其捕获中抛出错误,以便 sagaOne 可以再次捕获它。