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
我在使用 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