2016-03-03 16 views
14

È possibile effettuare un timeout di 3 secondi in una richiesta di post? Come ?Timeout angolare2 in richiesta post http

Il mio codice per il momento

this.http.post('myUrl', 
    MyData, {headers: Myheaders}) 
     .map(res => res.json()) 
     .subscribe(
      data => this.ret = data, 
      error => console.debug('ERROR', error), 
      () => console.log('END') 
     ); 

risposta

28

È possibile utilizzare l'operatore timeout in questo modo:

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') 
     ); 
+0

grazie per la risposta, ma non funziona per me, è sempre eseguire "ritorno nuovo errore ('ritardo superato')" – Raph

+0

Oh scusa! C'era un errore di battitura nella mia risposta. L'ho aggiornato. Se potessi fare un nuovo tentativo ... –

+0

@ThierryTemplier invece di restituire 'nuovo errore' dovremmo lanciare un errore' lanciare un nuovo errore' in modo che tu possa vedere quell'errore nella console con l'effettivo 'colore rosso' –

13

Potrebbe essere necessario importare timeout in questo modo

import 'rxjs/add/operator/timeout'

I non riuscivo a farlo funzionare senza che su rxjs 5.0.1 e angolare 2.3.1

9

Ho modificato la risposta di Thierry per farlo funzionare con l'ultima versione. È necessario rimuovere il secondo parametro della funzione di timeout. Secondo una discussione riguardante un problema di angular-cli, la funzione di timeout genera sempre un'eccezione Timeout.

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') 
    ); 
+1

Confermato che non è possibile passare un errore come secondo argomento in Angular 4 – Keegan