switchmap forkjoin example cancel http promise angular

http - forkjoin - switchmap



¿Cómo cancelar un HTTPRequest en Angular 2? (5)

Puede usar SwitchMap en el observable que cancelará cualquier respuesta de solicitud anterior y solo solicitará la última:

https://www.learnrxjs.io/operators/transformation/switchmap.html

¿Cómo cancelar un HTTPRequest en Angular 2?

Solo sé rechazar la promesa de solicitud.

return new Promise((resolve, reject) => { this.currentLoading.set(url, {resolve, reject}); this.http.get(url, {headers: reqHeaders}) .subscribe( (res) => { res = res.json(); this.currentLoading.delete(url); this.cache.set(url, res); resolve(res); } ); });


Puede utilizar la siguiente solución simple.

if ( this.subscription ) { this.subscription.unsubscribe(); } this.subscription = this.http.get( ''awesomeApi'' ) .subscribe((res)=> { // your awesome code.. })



Un poco tarde para la fiesta, pero aquí está mi opinión:

import { Injectable } from ''@angular/core'' import { Http } from ''@angular/http'' import { Observable } from ''rxjs/Observable'' import { Subscriber } from ''rxjs/Subscriber'' @Injectable () export class SomeHttpServiceService { private subscriber: Subscriber<any> constructor(private http: Http){ } public cancelableRequest() { let o = new Observable(obs => subscriber = obs) return this.http.get(''someurl'').takeUntil(o) .toPromise() //I dont like observables .then(res => { o.unsubscribe return res }) } public cancelRequest() { subscriber.error(''whatever'') } }

Esto le permite cancelar manualmente una solicitud. A veces termino con una observación o promesa que hará cambios a un resultado en la página. Si la solicitud se inició automáticamente (el usuario no escribió nada en un campo para x millis), es posible cancelar la solicitud (el usuario vuelve a escribir algo de repente) ...

takeUntil también debería funcionar con un tiempo de espera simple (Observable.timer) si eso es lo que está buscando https://www.learnrxjs.io/operators/filtering/takeuntil.html


Use switchMap [docs] , que cancelará todas las solicitudes en vuelo y usará solo las últimas.

get(endpoint: string): Observable<any> { const headers: Observable<{url: string, headers: HttpHeaders}> = this.getConfig(); return headers.pipe( switchMap(obj => this.http.get(`${obj.url}${endpoint}`, { headers: obj.headers, params: params }) ), shareReplay(1) ); }

shareReplay emitirá el último valor para los suscriptores tardíos.