Versand mehrere Aktion und warten Fertigstellung neben schicken

stimmen
2

Ich bin mehrere Aktion von einem Effekt der Rückkehr concatMap Aktion senden, um aber warten Sie nicht für die Fertigstellung nächste Aktion zu senden. loadDetails rufen Sie einen REST-Service und Update-Speicher, wenn er loadDetailsSuccess erhalten

Ich möchte loadDetailsAction beenden, bevor HttpResultActions.httpRequestUpdateSuccessful () aufrufen.

Wie kann das erreicht werden? Aus einer anderen Aktion?

@Effect()
  removeLibelle$ = this.actions$
    .ofType(DetailsActions.DELETE_LIBELLE)
    .map(toPayload)
    .withLatestFrom(this.store$.select(state => state.tree))
    .switchMap(([payload, tree]) => this.libelleService.deleteItem(payload)
      .concatMap(() => {
        return [
         DetailsActions.clear(), //function dispatch action clear
          DetailsActions.loadDetails({ entity: tree.entity,
            dateSearch: tree.search.dateSearch }), //function dispatch GET
          HttpResultActions.httpRequestUpdateSuccessful() //Dispatch action to show modal success
        ];
      }).catch(error => Observable.of(HttpResultActions.httpRequestError(error))));
Veröffentlicht am 12/06/2017 um 05:26
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
2

Sie tun, zu viele Dinge in einzelnen Effekt. Sie können es in mehrere Effekte zügig brechen. Denken Sie auf diese Weise es.

DELETE ---> perform delete ----> DELETE_SUCCESS , DELETE_ERROR

DELETE_SUCCESS ---> clear data ----> DATA_CLEAR_SUCCESS

DATA_CLEAR_SUCCESS ----> load data ----> LOAD_DATA_SUCCESS 

Ich habe die Aktionen in Serie. Sie können sie auch in parallell durchführen. Mai werden Sie sofort sowohl klare Daten und Laden von Daten ausgelöst werden soll, dann sieht es wie folgt aus:

DELETE ---> perform delete ----> DELETE_SUCCESS , DELETE_ERROR

DELETE_SUCCESS ---> clear data ----> DATA_CLEAR_SUCCESS

DELETE_SUCCESS ----> load data ----> LOAD_DATA_SUCCESS 

Jetzt können Sie Modelländerungen in jeder dieser Aktionen ausführen. Interessant daran ist, können Sie gleiche Modellwechsel haben für get http rufen oder http Anruf erhalten, nachdem löschen Erfolg. Das ist die Schönheit von redux.

Ihr Code wie folgt aussieht

@Effect()
  removeLibelle$ = this.actions$
    .ofType(DetailsActions.DELETE_LIBELLE)
    .map(toPayload)
    .withLatestFrom(this.store$.select(state => state.tree))
    .switchMap(([payload, tree]) => 
        this.libelleService.deleteItem(payload)
    )// return DELETE_SUCCESS
    .catch() //return DELETE_FAIL

 @Effect()
  removeLibelleDataClear$ = this.actions$
    .ofType(DetailsActions.DELETE_LIBELLE)
        //perform  DetailsActions.clear(),
        //return DATA_CLEAR_SUCCESS action
        // return DATA_CLEAR_ERROR action 

 // If you want to data load in parallell with clear, 
 // you can listen on delete_success . If you want to do 
 // it after data_clear, then listen on data_clear_success 
 @Effect()
  removeLibelleDataClear$ = this.actions$
    .ofType(DetailsActions.DATA_CLEAR_SUCCESS)
        //perform  
        //DetailsActions.loadDetails({ entity: tree.entity,
        //    dateSearch: tree.search.dateSearch })
        // DATA_LOAD_SUCCESS 
        //catch: DATA_LOAD_ERROR

Vielleicht möchten Sie sofort den Benutzer benachrichtigen, dass der Erfolg ist löschen. Und Daten aktualisieren. Oder können Sie verschiedene Aktion DELETE_SUCCESS_DATA_LOAD_SUCCESS hinzufügen und Benutzer darüber informieren, dass der Erfolg ist löschen.

auf diese Weise zu brechen macht sehr sehr einfach testen, vergleichen diese mit komplexen switchmap + concat + drei http Anrufe.

Beantwortet am 15/06/2017 um 02:01
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more