Angular 2 - 超时后取消订阅

时间:2017-05-17 14:06:46

标签: angular http typescript angular2-services

如果耗时过长,我想忽略来自API的响应。我用

$(window).on('mousein',function(e){
    $('#sidebar').css({'right':'0px'});
}
$(window).on('mouseout',function(e){
    $('#sidebar').css({'right':'-300px'});
});

获得回复。但是如果完成时间超过5秒,我想取消订阅。我知道我可以使用unsubscribe(),但是如何将其链接到超时值?

谢谢!

3 个答案:

答案 0 :(得分:7)

普通setTimeout应该有效:

let subscription = this.http.get(mysqlUrl).subscribe(...);

setTimeout(() => subscription.unsubscribe(), 5000);

答案 1 :(得分:7)

您可以使用takeUntil运算符:

this.http.get(mysqlUrl)
    .takeUntil(Observable.of(true).delay(5000))
    .subscribe(...)

答案 2 :(得分:2)

import 'rxjs/add/operator/timeout

this.http.get(mysqlUrl)
    .timeout(5000)
    .subscribe()