sagaでtakeを使うといつまでも待ち受けてしまうことがあるので、タイムアウトとエラーのハンドリングをうまいことやるには以下のようにやるとよさそうです。
yield put(actions.requestRefreshUsers()); const { success, error, timeout } = yield race({ success: take('success'), error: take('failure'), timeout: delay(5000).then(() => true), }); if (error) { throw new Error('fail refresh users.'); } if (timeout) { throw new Error('refresh users has timeout.'); }
参考
https://qiita.com/k_tada/items/8f92260f62d4a2c9ae69
https://redux-saga.js.org/docs/advanced/RacingEffects.html
http://mizchi.hatenablog.com/entry/2017/05/08/013632
https://medium.com/@rukurx/redux-saga%E3%81%A7%E7%A2%BA%E8%AA%8D%E7%94%A8%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B-6c76f4ee189c
https://qiita.com/kuy/items/716affc808ebb3e1e8ac