React native 无法捕获由redux saga调用()引发的错误,从而引发另一个saga

React native 无法捕获由redux saga调用()引发的错误,从而引发另一个saga,react-native,error-handling,redux,redux-saga,React Native,Error Handling,Redux,Redux Saga,假设我有一个传奇故事: 导出函数*initSignUp(操作){ 试一试{ 收益呼叫(注册、操作、注册详情) }捕捉(错误){ console.log('在initSignUp中被捕获',错误) 产生put({type:'SIGN\u-UP\u-FAIL',err,action}) } } 哪个是调用(调用?排队?)另一个: 导出功能*注册(操作){ 试一试{ let response=yield Auth.signUp({…}) 收益率put(addData({…})) }捕捉(错误){ c

假设我有一个传奇故事:

导出函数*initSignUp(操作){
试一试{
收益呼叫(注册、操作、注册详情)
}捕捉(错误){
console.log('在initSignUp中被捕获',错误)
产生put({type:'SIGN\u-UP\u-FAIL',err,action})
}
}

哪个是调用(调用?排队?)另一个:

导出功能*注册(操作){
试一试{
let response=yield Auth.signUp({…})
收益率put(addData({…}))
}捕捉(错误){ console.log('在注册中被捕获',错误) 抛出新错误(err) } }

如果在
yield Auth.signUp()
上这里的内部传奇失败,那么会命中第一个catch块,但是抛出错误会导致未捕获的异常

我尝试过抛出新错误(err)和返回承诺。拒绝(err)这两种方法,虽然后者失败得更为优雅,但我仍然从未遇到过“在initSignUp中捕获”这一行

为什么我不能在
initSignUp()
中捕获此错误

编辑:

initSignUp的名称如下:

函数*onboardingSaga(){
交出全部([
takeEvery(初始注册,初始注册),
...

及报名:

函数*authSaga(){
全部产生([
takeEvery(注册,注册), ...

根传奇:

导出默认函数*rootSaga(){
交出全部([
OnboardingSaga(),
AuthSaga()
])
}

堆栈跟踪:

[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
你应使用:

Redux saga期望产生声明性的


你不能直接给出一个承诺(我想Auth.signUp会返回一个承诺),你应该用
call()

谢谢你的建议,但是在rootSaga、takeEvery、signUp中仍然没有得到
的关注…
@edzillion我没有看到
takeEvery()
在您的代码中,但它存在于此堆栈跟踪中。必须使用
takeEvery()
从其他地方调用您的
signUp()
saga。跟踪该
takeEvery
并添加完整错误(使用堆栈跟踪)对于这个问题。好的,我已经添加了
takeEvery
部分和完整的堆栈跟踪。我实际上认为我应该使用
take
而不是
takeEvery
,因为我们只希望一次发生一次注册。实际上,您在
signUp()中有
无法读取未定义的
的属性“username”
当从
takeEvery()调用它时。
。很抱歉,无法进一步帮助处理代码。
let response = yield call([Auth, signUp], {...})