Angular 2 rxjs超时回调

6
我希望在HTTP调用超时事件发生时向用户提供反馈。
我尝试过以下这种方式:
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调用一开始就触发反馈服务。

当超时时间到达时,我该如何触发该服务?

1个回答

9
假设_feedbackService.error返回一个Error,您应该能够使用timeoutWithdefer操作符来完成您需要的操作:
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);

抱歉。我回答了这个问题,然后才意识到我误读了问题。我已经更新了答案。 - cartant
除了 rxjs/add/operator/timeoutWith 之外,我还需要导入什么才能使其工作?(即 "Rx." 部分)。 - Glenn Utter
你还需要 import "rxjs/add/observable/defer"import "rxjs/add/observable/throw" - cartant
谢谢。但是我使用那个会得到“类型'Observable'的'typeof'属性'defer'不存在”的错误。 - Glenn Utter
抱歉。路径中最后一个“/”前出现了一个不可见的空格。 - Glenn Utter
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接