2017-06-07 1 views
2

Redux Saga noob hier.Wie kann ich Redux-Saga erhalten, um darauf zu warten, dass zwei Aktionen mindestens einmal in beliebiger Reihenfolge passieren?

Ich muss einen Saga erstellen, der den Anfangszustand für den Redux-Speicher von meinem API-Server lädt.

Dies beinhaltet die Verwendung von zwei asynchronen Sagas: getCurrentUser und getGroups.

Ich brauche diese Ajax-Anforderungen parallel zu erteilen und für die GET_CURRENT_USER_SUCCESS und GET_GROUPS_SUCCESS Aktionen warten, bevor die pageReady Aktion Ausstellung, die die UI sagt, es ist Zeit die Komponenten reagieren zu machen.

kam ich mit einer hacky Lösung:

function * loadInitialState() { 
    yield fork(getCurrentUser) 
    yield fork(getGroups) 

    while (true) { 
    yield take([ 
     actions.GET_GROUPS_SUCCESS, 
     actions.GET_CURRENT_USER_SUCCESS 
    ]) 
    yield take([ 
     actions.GET_GROUPS_SUCCESS, 
     actions.GET_CURRENT_USER_SUCCESS 
    ]) 
    yield put(actions.pageReady()) 
    } 
} 

Das Problem mit diesem Code ist, dass aus irgendeinem Grund, wenn GET_GROUPS_SUCCESS zweimal ausgegeben wird, wird die pageReady Aktion zu früh aufgerufen werden.

Wie kann ich redux Saga für GET_GROUPS_SUCCESS warten und GET_CURRENT_USER_SUCCESSmindestens einmal in beliebiger Reihenfolge geschehen?

Antwort

2

Ich glaube, Sie die all effect

function * loadInitialState() { 
    // start loading state... 

    yield all([ 
    take(actions.GET_GROUPS_SUCCESS) 
    take(actions.GET_CURRENT_USER_SUCCESS) 
    ]); 

    yield put(actions.pageReady()) 
} 
wollen
Verwandte Themen