redux-saga和firebase-无法以干净的方式注销用户

时间:2018-12-31 19:58:25

标签: firebase firebase-authentication redux-saga

作为序言,请允许我提及我之前从未使用过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()时,我才能执行错误操作。请注意,错误被分派时也没有有效载荷。

I checked in Firebase's documentation,并且显然firebase.auth().signout()返回的承诺不包含任何内容。我开始怀疑这是否不是问题,也许redux-saga不喜欢在使用call()时没有任何承诺?

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

1 个答案:

答案 0 :(得分:1)

从NULLSWEΔT的评论中,我不得不打yield call([firebase.auth(), firebase.auth().signOut])

这样做的原因是因为JS的上下文以及this的工作方式。通过阅读thisthis(了解call([context, fn], ...args)的文档)获得更多详细信息。