2016-11-08 36 views
0

在我的场景中,用户可以兑换优惠券。虽然她没有登录,但她仍然可以测试兑换功能以了解它是如何工作的。在两个兑换流程之间切换

我有2个流量,notLoggedInRedeemFlow的情况下,当未登录她和loggedInRedeemFlow的情况下,她已登录。

我有根的传奇,也应该开始一个流和停止基础上,另用户登录状态。

我想出了在一个流程和一个cancellation行动之间使用该流程的竞赛。

应用程序启动时的notLoggedInRedeemFlow是有效,而当用户登录。

然后loggedInRedeemFlow启动并运行,直到用户注销它应该结束。

function* redeemFlows() { 
    while (true) { 
    const result = yield race({ 
     fake: call(notLoggedInRedeemFlow), 
     gotAccessToken: take([accountActions.LOGIN_SUCCESS, accountActions.START_SIGNUP_SUCCESS]), 
    }) 
    yield race({ 
     run: call(loggedInRedeemFlow, result.gotAccessToken.payload.access_token), 
     logout: take(accountActions.LOGOUT_SUCCESS), 
    }) 
    } 
} 

我的问题是,如果这是最好的方式来处理这种情况在redux-sagas?

回答

0

如果我正确理解您的用例,那么我相信您需要从UI中触发的REDEEM操作以及解释您是否已登录的传奇。如果您已登录,则请输入REDEEM_LOGGED_IN操作,否则请输入REDEEM_NOT_LOGGED_IN操作。并且会有分传统分别处理REDEEM_LOGGED_IN和REDEEM_NOT_LOGGED_IN动作。

import {takeLatest} from 'redux-saga'; 

export default function* rootSaga() { 
    yield takeLatest('REDEEM', handleGenericRedeem); 
    yield takeLatest('REDEEM_NOT_LOGGED_IN', handleRedeemNotLoggedIn); 
    yield takeLatest('REDEEM_LOGGED_IN', handleRedeemLoggedIn); 
} 

确切的操作名称和是否使用takeLatest取决于您和您的具体用例。你可能不需要也不想要takeLatest,但是代码片段应该让你了解如何以单向方式解决问题。