J'ai ce code:
this.loading = true;
this.http.get<IUser[]>(Urls.users())
.subscribe(
response => {
this._values = <IUser[]>response;
this.root.next({'users': this._values});
},
e => console.log(e),
() => this.loading = false
);
La page qui appelle ce code a une icône qui indique que "chargement" est défini sur "vrai". Mais lorsque la demande est terminée en moins de 0,5 seconde, le disque est à peine visible et il a l’air bizarre sur la page.
Comment puis-je faire cette demande attendre 1 seconde avant de terminer (sans utiliser setTimeout ())?
Existe-t-il un moyen de retarder toutes les demandes http sans avoir à modifier tous les codes comme celui ci-dessus?
J'ai fini par utiliser un opérateur HttpInterceptor + delay (merci @ Faisal): C'est la solution à ma question, mais ce n'est pas nécessairement la meilleure expérience utilisateur. Veuillez consulter le commentaire de @AlexanderLeonov à ce sujet.
// ANGULAR
import { Injectable } from '@angular/core';
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';
// OBSERVABLES
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/delay';
@Injectable()
export class DelayInterceptor implements HttpInterceptor {
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
console.log(request);
return next.handle(request).delay(500);
}
}
Utilisez rxjs/delay:
this.http.get(...).delay(500).subscribe(...);
En angulaire 6+:
this.http.get(...).pipe(delay(500)).subscribe(...);