firebase 直接运行时 Redux saga 调用错误

Redux saga call errors when firebase functions directly

我在使用 redux sagas 和 firebase 时遇到了一些奇怪的行为,我只是想知道是否有人知道为什么会这样。

yield call(firebase.auth().signOut);

产生以下错误:

[TypeError: undefined is not an object (evaluating 'this.i.then')]

但是以下操作没有问题:

yield call(()=> firebase.auth().signOut());

这些对我来说似乎是一样的,我想知道是什么导致了它们之间的不同行为。

当您使用第一个版本时,您使用不正确的上下文调用了 signOut 方法。此方法不是纯函数,它取决于上下文 this 是特定对象。当你引用像

这样的函数时,你就失去了这个上下文
firebase.auth().signOut

您可以像以前那样解决问题,或者也可以这样解决:

yield call([firebase.auth(), 'signOut']);

在这两种情况下,signOut 将像对象的方法一样被调用,并且不会与该对象分离,因此它不会丢失上下文并且 this 内部仍然指向正确的实例(auth 对象)。

这是一个需要阅读和理解的重要概念。检查此页面:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this