Ошибки вызова саги Redux, когда Firebase работает напрямую - PullRequest
0 голосов
/ 22 января 2019

Я получаю какое-то странное поведение при использовании избыточных саг и firebase, и мне просто интересно, знает ли кто-нибудь, почему это происходит.

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

Выдает следующую ошибку:

[TypeError: undefined не является объектом (оценивает 'this.i.then')] *

Однако без проблем работает следующее:

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

Они кажутся идентичнымия и я хотели бы знать, что происходит, что вызывает различное поведение между ними.

1 Ответ

0 голосов
/ 22 января 2019

Когда вы используете свою первую версию, вы вызываете метод 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

...