У меня есть вопрос о redux-saga вместе с abortController.Посмотрите на пример кода saga.js ниже:
// saga.js
import { cancelled, call, takeLatest } from 'redux-saga/effects';
const makeRequest = async (option) => {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/todos/1', option);
return response ;
} catch (err) {
console.log('(1) Abort Error', err);
throw new Error('(2) Error cannot be catch and not be warning in anywhere');
}
}
export function* sagaFunc() {
const abortController = new AbortController();
try {
const res = yield call(makeRequest, {
signal: abortController.signal
});
console.log(res)
} catch (error) {
console.log('(3) This catch does not catch anything', error)
} finally {
if (yield cancelled()) {
abortController.abort('Cancel request');
}
}
}
export default function* rootSaga() {
yield takeLatest('SAMPLE_ACTION', sagaFunc);
}
Проблема в том, что когда я повторно отправляю 'SAMPLE_ACTION', который является yield как takeLatest, предыдущая сага будет отменена, и запрос будет отменен, потому что он выбрасываетпрерванная ошибка, и я могу зарегистрировать ее как (1) console.log.
Затем я выбрасываю новую ошибку как (2), но эта ошибка не может быть перехвачена, и браузер не отображал никаких сообщений об ошибкахо неперехваченной ошибке .
Для ошибки перехвата в (3) это не будет триггер, я уже понимаю об этом случае.Но я все еще запутался в случае (2), почему эта ошибка метания, похоже, игнорируется?