web-dev-qa-db-fra.com

Comment expirer la requête http angular2

Voici juste une demande régulière qui ressemble à ça:

 this.people = http.get('http://localhost:3000/users')
      .map(response => response.json());
  }

Y at-il un moyen de retarder/expirer cela?

16
sreginogemoh

Vous pouvez utiliser l'opérateur timeout d'observables, comme décrit ci-dessous:

return this.http.get('http://api.geonames.org/postalCodeSearchJSON',
          { search: params })
    .retryWhen(error => error.delay(500))
    .timeout(2000, new Error('delay exceeded')) // <------
    .map(res => res.json().postalCodes);

Voir cet article pour plus de détails (avec la section "Nouvelle tentative de support"):

33
Thierry Templier

La valeur de retour de http.get() est observable, pas la réponse . Vous pouvez l’utiliser comme ceci:

getPeople() {
  return http.get('http://localhost:3000/users')
      .timeout(2000)
      .map(response => response.json());
  }
}

foo() {
  this.subscription = getPeople.subscribe(data => this.people = data)
}

// to cancel manually
cancel() {
  this.subscription.unsubscribe();
}

Voir aussi https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/timeout.md

8
Günter Zöchbauer

Si vous utilisez RxJS version 6 ou supérieure, la syntaxe actuelle est la suivante:

importer {timeout} de 'rxjs/operators';

getPeople(){
  return this.http.get(API_URL)
  .pipe(
      timeout(5000) //5 seconds
  );
0
Virendra Singh