代码之家  ›  专栏  ›  技术社区  ›  undefined

当firebase直接运行时,减少saga调用错误

  •  1
  • undefined  · 技术社区  · 7 年前

    在使用Redux Saga和FireBase时,我有一些奇怪的行为,我只是想知道是否有人知道为什么会发生这种情况。

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

    产生以下错误:

    [类型错误:未定义不是对象(计算“this.i.then”)]

    但是,以下工作没有问题:

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

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   dfsq    7 年前

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

    firebase.auth().signOut
    

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

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

    在两种情况下 信号灯 将像对象的方法一样被调用,并且不会与此对象分离,因此它不会丢失上下文和 内部静止点指向正确的实例 auth 对象)。

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