2016-03-03 2 views
14

Возможно ли сделать тайм-аут 3 секунд в почтовом запросе? Как ?Angular2 timeout в http post request

Мой код на данный момент

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

ответ

28

Вы можете использовать оператор timeout так:

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

Спасибо за ответ, но это не работает для меня, всегда выполнять «вернуть новый Error („задержка превышена“)» – Raph

+0

Ой извините! В моем ответе была опечатка. Я обновил его. Если вы могли бы сделать новую попытку ... –

+0

@ThierryTemplier вместо возврата 'new Error', мы должны выбросить ошибку' throw new Error', чтобы вы могли видеть эту ошибку в консоли с фактическим «красным цветом» –

13

Вы, возможно, потребуется импортировать тайм-аут, как так

import 'rxjs/add/operator/timeout'

I не мог заставить его работать без этого на rxjs 5.0.1 и угловой 2.3.1

9

Я изменил ответ Тьерри, чтобы он работал с последним выпуском. Необходимо удалить второй параметр функции таймаута. Согласно обсуждению проблемы с угловым cli, функция тайм-аута всегда выдает TimeoutError.

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

Подтверждено, что ошибка не может быть передана в качестве второго аргумента в Angular 4 – Keegan