Web-dev 和 Angular 的新手。 这是我当前的代码。现在,它所做的只是每 2 秒调用一次 http 请求并在控制台记录消息。 我想要的是,如果消息与字符串“5”匹配,让它取消订阅。另外,我如何将其设为非嵌套订阅? (嵌套订阅是一种不好的做法吗?)。目前,我正在使用 Angular 5 和 rxjs 5。
public checkProgress() {
Observable
.interval(2000)
.subscribe(
x => {
this.myService.getStatus()
.subscribe( data => console.log(data));
}
);
}
此外,如果用户导航到不同的组件,我该如何取消订阅? ngOnDestroy?
最佳答案
有多种方法可以做到这一点。选择:
递归 - 一个三元运算符
expand(val => val === "5" ? this.myService.getStatus().pipe(delay(2000)) : empty())
使用takeWhile
递归
expand(() => this.myService.getStatus().pipe(delay(2000)))
.pipe(takeWhile(val => val !== "5"))
间隔 takeWhile
timer(0, 2000)
.pipe(
switchMap(() => this.myService.getStatus()),
takeWhile(val => val !== "5")
)
关于javascript - RxJS 5, Angular : How to do a request every x seconds UNTIL a message matches a certain string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53037070/