redux传奇和firebase-Can';t以干净的方式注销用户

redux传奇和firebase-Can';t以干净的方式注销用户,firebase,firebase-authentication,redux-saga,Firebase,Firebase Authentication,Redux Saga,作为前言,让我提一下,在今天之前,我从未使用过redux saga或Firebase。我目前正在尝试这两种技术 我可能只是错过了一个小概念,但我似乎无法在我的应用程序上注销。我想我应该使用call()来管理一个传奇故事中的副作用,但没有什么能起到作用 这是一个值得商榷的传奇故事: export function* deauthenticateUser() { yield takeLatest(DEAUTHENTICATE_REQUEST, function* () { try {

作为前言,让我提一下,在今天之前,我从未使用过redux saga或Firebase。我目前正在尝试这两种技术

我可能只是错过了一个小概念,但我似乎无法在我的应用程序上注销。我想我应该使用
call()
来管理一个传奇故事中的副作用,但没有什么能起到作用

这是一个值得商榷的传奇故事:

export function* deauthenticateUser() {
  yield takeLatest(DEAUTHENTICATE_REQUEST, function* () {
    try {
      yield call(firebase.auth().signOut)
      yield put({ type: DEAUTHENTICATE })
    }
    catch (error) {
      yield put({
        type: DEAUTHENTICATE_FAILURE,
        payload: error,
        error: true,
      })
    }
  })
}
我确认调用
firebase.auth().signout()
直接起作用,只有在使用
call()
时,我才会得到错误操作。请注意,当发送错误时,也没有有效负载

,显然,
firebase.auth().signout()
返回一个承诺,内容中没有任何内容。我开始怀疑这是否不是问题所在,也许
redux saga
不喜欢在使用
call()
时没有结果


如何处理身份验证,尤其是使用Firebase和redux saga注销?

从NULL SWEΔT的评论中,我不得不调用
产生调用([Firebase.auth(),Firebase.auth().signOut])


这是因为JS的上下文以及它是如何工作的。通过阅读和(阅读
调用([context,fn],…args)的文档)了解更多详细信息。

您可以尝试
生成调用([firebase.auth(),firebase.auth().signOut])
?它成功了。现在。。。我很想知道为什么。
yield call(firebase.auth().signOut)
不够吗?Tbh,我不知道。我以前遇到过这个问题,这就解决了它。这是因为函数上下文才有意义。没有完全意识到
call()
做了什么。非常感谢。