Est-il possible de faire un timeout de 3 secondes dans une post-demande? Comment ?
Mon code pour le moment
this.http.post('myUrl',
MyData, {headers: Myheaders})
.map(res => res.json())
.subscribe(
data => this.ret = data,
error => console.debug('ERROR', error),
() => console.log('END')
);
Vous pouvez utiliser l'opérateur timeout
comme ceci:
this.http.post('myUrl',
MyData, {headers: Myheaders})
.timeout(3000, new Error('timeout exceeded'))
.map(res => res.json())
.subscribe(
data => this.ret = data,
error => console.debug('ERROR', error),
() => console.log('END')
);
Vous devrez peut-être importer le délai d'expiration comme ceci
import 'rxjs/add/operator/timeout'
Je ne pourrais pas le faire fonctionner sans cela sur rxjs 5.0.1
et angular 2.3.1
Modifier le 20 avril 2018
veuillez ne pas importer d'opérateurs de cette façon, dans rxjs +5.5 vous pouvez importer des opérateurs comme celui-ci avec
import { timeout } from 'rxjs/operators/timeout';
// Use it like so
stream$.pipe(timeout(3000))
Veuillez vérifier ce document qui explique en détail les opérateurs canalisables.
J'ai modifié la réponse de Thierry pour la faire fonctionner avec la dernière version. Il est nécessaire de supprimer le deuxième paramètre de la fonction timeout. Selon une discussion concernant un problème angular-cli, la fonction timeout lève toujours une TimeoutError maintenant.
this.http.post('myUrl',
MyData, {headers: Myheaders})
.timeout(3000)
.map(res => res.json())
.subscribe(
data => this.ret = data,
error => console.debug('ERROR', error),
() => console.log('END')
);