在redux saga中的异步函数之后做一些工作

时间:2017-11-21 00:25:27

标签: reactjs redux redux-saga

我正在使用redux-saga开展项目。 之前我正在使用thunk所以我可以在api请求之后做一些工作,

componentDidMount(){
  login().then((success)=>{
    redirectToProfilePage();
  })
}

因为redux-thunk中的操作返回promise。 但是当我试图在redux-saga中尝试这样做时,我不能使用然后,因为saga没有回复承诺。

所以我使用componentWillReceiveProps来解决这个问题,但我认为这不是一个合适的解决方案。

我应该在saga发生器中做这项工作吗?或者还有其他更好的方法吗?

1 个答案:

答案 0 :(得分:2)

为了充分发挥Sagas的潜力,您需要在componentDidMount中调度一个动作。

在该组件的sagas.js文件中,创建一个函数生成器以侦听componentDidMount中的操作:

function* listenForLoginAction(){
    yield takeLatest('LOGIN_ACTION', loginSaga)
}

然后您的loginSaga将按照您告诉它的顺序处理异步内容。您的loginSaga看起来像这样:

function* loginSaga(action){
    try{
        const loginResponse = yield call(loginFunc, varsForloginFunc)
        yield put({type: 'LOGIN_SUCCESS', loginResponse})
    } catch (error) {
        yield put({type: 'LOGIN_FAIL', message: error.message})
    }
}

使用yield callyield put结合使用takeLatesttakeEvery侦听特定操作,可以编写等待执行的代码,直到该行它已经完成了。

希望有所帮助!!