2016-08-17 2 views
4

Я хочу предоставить обратную связь пользователю, если произойдет событие таймаута при вызове HTTP.Угловой 2 обратный вызов времени rxjs

Я попытался это:

return this._http 
       .post(apiUrl + 'Search/Everything', params, {withCredentials: true, headers: this.headers}) 
       .timeout(5000, this._feedbackService.error("Custom error message")) 
       .map((response: Response) => response.json().data); 

Но выстреливает службу обратной связи, как только вызов HTTP производится.

Как мне запустить службу, когда тайм-аут срабатывает?

ответ

5

Предполагая, что _feedbackService.error возвращает Error, вы должны быть в состоянии делать то, что вам нужно с timeoutWith и defer операторов:

import "rxjs/add/observable‌​/defer"; 
import "rxjs/add/observable‌​/throw"; 
import "rxjs/add/operator/timeoutWith"; 
import { Observable } from "rxjs/Observable‌​"; 

return this._http 
    .post(apiUrl + 'Search/Everything', params, {withCredentials: true, headers: this.headers}) 
    .timeoutWith(5000, Observable.defer(() => Observable.throw(this._feedbackService.error("Custom error message")))) 
    .map((response: Response) => response.json().data); 
+0

К сожалению. Я ответил на это, а потом понял, что неправильно понял вопрос. Я обновил ответ. – cartant

+0

Что мне нужно импортировать, кроме 'rxjs/add/operator/timeoutWith', чтобы сделать эту работу? (часть «Rx.»). –

+0

Вам понадобится «импорт» rxjs/add/observable/defer «' и «import» rxjs/add/observable/throw ». – cartant

Смежные вопросы