2017-10-19 1 views
1

Ich habe begonnen, mit Redox-Observable in React arbeiten und ich blieb mit Intervall-API-Anfrage.Interval API-Aufrufe in Redux-Observable

Es ist Code für mein Epos, das gut funktioniert, aber nur für einzelne Anfrage:

const fetchPointValue = (action$) => 
 
    action$ 
 
    .ofType(actionTypes.REQUEST_POINT_VALUE) 
 
    .mergeMap(action => 
 
      ajax.getJSON(`${API_SERVER_URL}/point/value/${action.payload.id}`) 
 
      .map(response => receivePointValue(action.payload.id, response)) 
 
      .startWith(fetchingPointValue(action.payload.id)) 
 
    )

Nun muss ich es Intervall ändern - wenn die Aktion REQUEST_POINT_VALUE war aufgerufen, muss ich alle ~ 5 Sekunden Wert anfordern, bis REQUEST_POINT_CANCEL Aktion. Wahrscheinlich mit .TakeUntil ("REQUEST_POINT_CANCEL") und .interval (5000) könnte mein Problem lösen, aber ich habe alle möglichen Kombinationen versucht, und immer noch nicht arbeiten Version erreichen.

Antwort

2

Ja, können Sie diese .interval und .takeUntill mit erreichen:

action$ 
    .ofType(actionTypes.REQUEST_POINT_VALUE) 
    .mergeMap(action => 
    Observable 
     .interval(5000) 
     .switchMap(/* make request here */) 
     .takeUntil(action$.ofType(actionTypes.REQUEST_POINT_CANCEL)) 
) 

in der Dokumentation Werfen Sie einen Blick und Beispiel hier - 3.1 Cancellation

+2

Große Antwort! Außerdem: Wenn Sie möchten, dass die erste Anfrage sofort startet, anstatt auf die ersten 5000 ms zu warten, können Sie 'Observable.interval (5000) .startWith (0)' – jayphelps

+0

Danke Jungs, es funktioniert gut! – ELP24