Angular2 тайм-аут в почтовом запросе

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

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

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

Ответы

Ответ 1

Вы можете использовать оператор 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')
         );

Ответ 2

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

import 'rxjs/add/operator/timeout'

Я не мог заставить его работать без этого на rxjs 5.0.1 и angular 2.3.1

Ответ 3

Я изменил ответ Тьерри, чтобы он работал с последней версией. Необходимо удалить второй параметр функции таймаута. Согласно обсуждению проблемы angular -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')
     );