使用redux sagas和firebase时出现一些奇怪的行为,我只是想知道是否有人知道为什么会发生这种情况。
yield call(firebase.auth().signOut);
产生以下错误:
[TypeError:未定义不是对象(正在评估'this.i.then')]
但是,以下方法可以正常工作:
yield call(()=> firebase.auth().signOut());
这些对我来说似乎是相同的,我想知道发生了什么事,从而导致它们之间的行为不同。
答案 0 :(得分:1)
使用第一个版本时,您会在错误的上下文中调用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