@angular @ NGRX / Effekte HTTP Request Hält Canceling und Retrying

stimmen
1

Ich habe eine sehr einfache Wirkung in Kraft, dass eine HTTP-Anfrage macht und löst eine Aktion, wenn es fertig ist.

Die HTTP-Anforderung wird ständig abgebrochen und immer und immer wieder neu gemacht.

Geben

Ursprünglich dachte ich, es ist switchMap, das das Problem verursacht wurde (die beobachtbare Cancelling), so habe ich versucht mergeMap (gleiches Ergebnis) verwendet wird.

Unten ist mein Code für den Effekt.

signIn$ = this.actions$
  .ofType(ACTIONS.AUTH.SIGN_IN)
  .map(toPayload)
  .map(payload => toInput(payload))
  .switchMap(input => this.http
      .post<Output>(`${GLOBALS.endpoint}/auth/authenticate`, input)
      .map(output => ({ type: ACTIONS.APP.PUSH_NOTIFICATION, payload: test }))
      .catch(error => of(createAction(ACTIONS.APP.LOG_EXCEPTION, error)))
  );

Der obige Code kompiliert ohne Fehler und funktioniert wie erwartet, mit Ausnahme der Tatsache, dass es immer wieder annullieren und remaking der HTTP-Anforderung.

Ich weiß nicht, ob es wichtig ist, aber ich bin mit dem Httpclient (@ Winkel / common / http), nicht @ Winkel / http.

Jede Beratung wäre sehr dankbar!

Veröffentlicht am 31/07/2017 um 17:07
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
0

Sieht aus wie Sie die gleiche Anfrage mehrere Male innerhalb eines kurzen Zeitrahmens senden. Versuchen Sie, die Anfrage nur zu begrenzen, wenn das Token geändert. könnte unten arbeiten:

signIn$ = this.actions$
  .ofType(ACTIONS.AUTH.SIGN_IN)
  .distinctUntilChanged()
  .map(payload => toInput(payload))
  .switchMap(input => this.http
      .post<Output>(`${GLOBALS.endpoint}/auth/authenticate`, input)
      .map(output => ({ type: ACTIONS.APP.PUSH_NOTIFICATION, payload: "test" }))
      .catch(error => of(createAction(ACTIONS.APP.LOG_EXCEPTION, error)))
  );
Beantwortet am 31/07/2017 um 17:11
quelle vom benutzer

stimmen
4

„SwitchMap“ hat seinen eigenen „unsubscribe“ Mechanismus, den die api-Anfragen abbrechen,

mit „flatMap“ (oder mergeMap) stattdessen sollte für Sie arbeiten.

Beantwortet am 03/01/2018 um 10:24
quelle vom benutzer

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