Допустим, у меня есть одна сага:
export function * initSignUp (action) {
try {
yield call(signUp, action.signUpDetails)
} catch (err) {
console.log('caught in initSignUp', err)
yield put({ type: 'SIGN_UP_FAIL', err, action })
}
}
, которая вызывает (вызывает? Queuing?) Другую:
export function * signUp (action) {
try {
let response = yield Auth.signUp({...})
yield put(addData({...}))<br>
} catch (err) {
console.log('caught in signUp', err)
throw new Error(err)
}
}
Если внутренняя сага здесь терпит неудачу на yield Auth.signUp()
, тогда первый блок catch срабатывает, но выбрасывание ошибки приводит к неперехваченному исключению.
Я пробовал и throw new Error(err)
, и return Promise.reject(err)
, и, хотя последний терпит неудачу более изящно, я все равно никогда не нажимал на строку «поймано в initSignUp».
Почему я не могу catch
эта ошибка в initSignUp()
?
edit:
initSignUp вызывается так:
function * onboardingSaga () {
yield all([
takeEvery(INIT_SIGN_UP, initSignUp),
...
и signUp:
function * authSaga () {
yield all([<br>
takeEvery(SIGN_UP, signUp),
...
rootSaga:
export default function * rootSaga () {
yield all([
OnboardingSaga(),
AuthSaga()
])
}
Stacktrace:
[14:04:16] uncaught at rootSaga, at rootSaga
at rootSaga
at takeEvery
at signUp
TypeError: Cannot read property 'username' of undefined
at signUp$ (blob:http://192.168.178.27:19001/d74267c7-c785-4744-a144-ed0c708da730:224959:89)
at tryCatch (blob:http://192.168.178.27:19001/d74267c7-c785-4744-a144-ed0c708da730:20888:19)
at Generator.invoke [as _invoke] (blob:http://192.168.178.27:19001/d74267c7-c785-4744-a144-ed0c708da730:21063:24)
at Generator.prototype.(anonymous function) [as next] (blob:http://192.168.178.27:19001/d74267c7-c785-4744-a144-ed0c708da730:20931:23)
at next (blob:http://192.168.178.27:19001/d74267c7-c785-4744-a144-ed0c708da730:149528:29)
at proc (blob:http://192.168.178.27:19001/d74267c7-c785-4744-a144-ed0c708da730:149503:5)
at runForkEffect (blob:http://192.168.178.27:19001/d74267c7-c785-4744-a144-ed0c708da730:149744:21)
at runEffect (blob:http://192.168.178.27:19001/d74267c7-c785-4744-a144-ed0c708da730:149629:770)
at next (blob:http://192.168.178.27:19001/d74267c7-c785-4744-a144-ed0c708da730:149532:11)
at currCb (blob:http://192.168.178.27:19001/d74267c7-c785-4744-a144-ed0c708da730:149606:9)
- node_modules\expo\build\logs\LogSerialization.js:145:14 in _captureConsoleStackTrace
- node_modules\expo\build\logs\LogSerialization.js:40:24 in Object.serializeLogDataAsync$
- ... 9 more stack frames from framework internals