2016-11-08 37 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,但是代碼片段應該讓你瞭解如何以單向方式解決問題。