【问题标题】:redux saga, yield with function that return promise does not workredux saga,yield with function that return promise 不起作用
【发布时间】:2020-03-28 06:28:39
【问题描述】:

我想在我的项目中使用 redux-saga,但遇到了一点问题。 这是一个 saga worker 函数,应该使用 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)

function auth.signInWithEmailAndPassword() 是返回的承诺。当 promise 被解决或拒绝时,yield 应该像 await 一样等待,但什么都没有发生。

请给我任何有关此类问题的建议。

【问题讨论】:

    标签: redux-saga


    【解决方案1】:

    根据docs,你需要使用从redux-saga/effects导出的call函数。

    第一个参数是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))
        }
    }
    

    【讨论】:

    • 谢谢。我尝试使用你写的调用函数,但在我的情况下,我只有通过调用这样的调用才能得到工作变体: call([context, fnName], ...args)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 2018-12-23
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    相关资源
    最近更新 更多