2017-11-13 1 views
0

Am Cancelling versuchen, die winkelförmigen StangenHttpclient Service zu verwenden, um eine Anforderung mit einer Anzahl von Versuchen zu machen und einer Verzögerung dazwischen. Der Code funktioniert, aber ich habe im devTools-Netzwerk festgestellt, dass am Ende eine zusätzliche Anfrage gesendet und abgebrochen wird. Was mache ich falsch hier tun, ist der Code:Angular Httpclient-Anfrage mit Wiederholung und Verzögerung sendet eine zusätzliche Anforderung dann

return this.http.post<LoginSuccessPayload>('/api/auth/signin', payload).pipe(
    retryWhen(errors => { 
    return errors.pipe(
     mergeMap((er: any) => { 
     if (er.status === 504 || er.status === 503) { 
      return of(er.status).pipe(delay(1000)); 
     } 
     return _throw({message: er.error.message || 'Notification.Core.loginError'}); 
     }), 
     take(3), 
     concat(_throw({message: 'Notification.Core.networkError'})) 
    ); 
    }) 
); 

Hier ist ein Bild von Firefox und Chrome Registerkarte Netzwerk sollte es drei Anfrage sein, aber seine vier machen und Aufheben der letzten enter image description here

+0

Können Sie zeigen, welche Netzwerkanrufe es tun? – martin

Antwort

0

Hier ist, wie ich es gelöst habe. jetzt drei Versuche mit einer zweiten Verspätung pro Anfrage und keine zusätzliche stornierte Anfrage

return this.http.post<LoginSuccessPayload>('/api/auth/signin', payload).pipe(
    retryWhen(errors => errors.pipe(
    switchMap((error) => { 
     if (error.status === 504 || error.status === 503) { 
     return of(error.status); 
     } 
     return _throw({message: error.error.message || 'Notification.Core.loginError'}); 
    }), 
    scan((acc) => { 
     return acc + 1; 
    }, 0), 
    takeWhile(acc => acc < 3), 
    delay(1000), 
    concat(_throw({message: 'Notification.Core.networkError'})) 
)) 
); 
Verwandte Themen