Firebase直接运行时的Redux saga调用错误

时间:2019-01-22 11:45:06

标签: javascript firebase redux-saga

使用redux sagas和firebase时出现一些奇怪的行为,我只是想知道是否有人知道为什么会发生这种情况。

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

产生以下错误:

  

[TypeError:未定义不是对象(正在评估'this.i.then')]

但是,以下方法可以正常工作:

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

这些对我来说似乎是相同的,我想知道发生了什么事,从而导致它们之间的行为不同。

1 个答案:

答案 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