Angular 2 - 超时后取消订阅

use*_*823 1 http typescript angular2-services angular

如果花费太长时间,我想忽略我的API的响应.我用

this.http.get(mysqlUrl).subscribe()
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Fra*_*ica 7

平原setTimeout应该工作:

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

setTimeout(() => subscription.unsubscribe(), 5000);
Run Code Online (Sandbox Code Playgroud)

  • 我认为当`setTimeout`被用作黑客时,人们不喜欢.但在这种特殊情况下,您实际上想要等待超时.此外,Angular 2补丁异步函数如`setTimeout`,因此它在Angular 1中的行为类似于`$ timeout`. (2认同)

JB *_*zet 7

你可以使用takeUntil运算符:

this.http.get(mysqlUrl)
    .takeUntil(Observable.of(true).delay(5000))
    .subscribe(...)
Run Code Online (Sandbox Code Playgroud)