Редак саги, выход с функцией, которая возвращает обещание не работает - PullRequest
0 голосов
/ 25 марта 2020

Я бы хотел использовать redux-saga в своем проекте и застрять с одной точкой. Вот рабочая функция saga, которая должна войти в систему пользователя с помощью службы аутентификации firebase.

function* emailSignIn({payload}) {

    try {

        const user = yield auth.signInWithEmailAndPassword(payload.email, payload.password)

        yield put(signInSuccess(user)) //this line does not executed
    } catch (e) {
        debugger
        yield put(signInFail(e))
    }
}

Проблема в том, что код после этой строки не выполняется И в консоли нет ошибок. Я просто не могу понять, что происходит.

 const user = yield auth.signInWithEmailAndPassword(payload.email, payload.password)

функция auth.signInWithEmailAndPassword () возвращается обещание. И доход должен ждать, как и ждать, когда обещание будет выполнено или отклонено, но ничего не произошло.

Пожалуйста, дайте мне любой совет о такой проблеме.

1 Ответ

0 голосов
/ 28 марта 2020

В соответствии с документами вам необходимо использовать функцию call, экспортированную из redux-saga/effects.

Первый параметр - function, а остальные - args функция.

import { call, put } from 'redux-saga/effects'

function* emailSignIn({payload}) {
    try {
        const user = yield call(auth.signInWithEmailAndPassword, payload.email, payload.password)
        yield put(signInSuccess(user))
    } catch (e) {
        debugger
        yield put(signInFail(e))
    }
}
...