Angular 5 $http 使用 RXJS 进行轮询
Angular 5 $http polling with RXJS
我正在尝试创建一个轮询服务,这就是我所取得的成就。
目标是进行轮询,当响应包含特定值时可以停止轮询(例如 running: false
)
// Sample call
_getData(): Observable<any> {
return new Observable((observer) => {
setTimeout(() => {
observer.next({ data: "bar", running: true });
}, 2000)
})
}
start() {
timer(0, 5000)
.pipe(
concatMap(() => from(this._getData())
.pipe(map(response => response))
)
)
// .pipe(filter(backendData => backendData.running === true))
.subscribe(() => console.info("CIAO" + ++calls))
}
问题是这会触发一次。
我做错了什么?
这是因为 concatMap
等待其内部 Observable 完成。
在你的 _getData
中你 return new Observable
然后你自己调用 next()
但你永远不会调用 complete()
所以 Observable 保持打开状态。然后concatMap
将永远不会再调用它的项目方法,因为它正在等待之前的 Observable 完成。
我正在尝试创建一个轮询服务,这就是我所取得的成就。
目标是进行轮询,当响应包含特定值时可以停止轮询(例如 running: false
)
// Sample call
_getData(): Observable<any> {
return new Observable((observer) => {
setTimeout(() => {
observer.next({ data: "bar", running: true });
}, 2000)
})
}
start() {
timer(0, 5000)
.pipe(
concatMap(() => from(this._getData())
.pipe(map(response => response))
)
)
// .pipe(filter(backendData => backendData.running === true))
.subscribe(() => console.info("CIAO" + ++calls))
}
问题是这会触发一次。 我做错了什么?
这是因为 concatMap
等待其内部 Observable 完成。
在你的 _getData
中你 return new Observable
然后你自己调用 next()
但你永远不会调用 complete()
所以 Observable 保持打开状态。然后concatMap
将永远不会再调用它的项目方法,因为它正在等待之前的 Observable 完成。