TS
tempThermometer = new BehaviorSubject<any>([]);
subscription: Subscription;
const promises = list.map(
(url: any) =>
new Promise(resolve => {
this.subscription = this.global.getData(url.link).pipe(take(1)).subscribe((res) => {
const urlArr = new Array();
urlArr.push(url);
this.tempThermometer.value.filter((data: any) => {
if (data.spinning) {
return data.spinning = urlArr.findIndex((x: any) => x.sensor === data.sensor) === -1
}
return;
});
resolve(res);
}, (err: Error) => {
return reject(err);
});
})
);
merge(...observables).subscribe((results) => {
console.log(results);
}
ngOnDestroy() {
if (this.subscription) {
this.subscription.unsubscribe();
}
}
我在这里要做的是取消承诺,因为当我单击其他页面时,它仍在运行/获取数据,而我希望在单击其他页面时停止它。
取消订阅无效。该如何解决?
答案 0 :(得分:3)
最基本的方法是存储从调用Subscription
返回的subscribe
,然后在离开页面时在unsubscribe
上调用Subscription
方法( ngOnDestroy
Angular中的生命周期挂钩,有关生命周期挂钩的更多信息:here)。
在您的组件中:
ngOnInit() {
this.sub = this.something.subscribe( ... )
}
ngOnDestroy() {
this.sub.unsubscribe();
}
还有许多其他方式:
take
运算符将在N个值后取消订阅。 takeWhile
运算符,它将基于谓词取消订阅。这里有一篇文章讨论了6种不同的退订方式:https://blog.bitsrc.io/6-ways-to-unsubscribe-from-observables-in-angular-ab912819a78f