javascript - 如何修复角度取消订阅
问题描述
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();
}
}
我在这里要做的是取消订阅承诺,因为当我点击其他页面时它仍在运行/获取数据,我希望它在我点击其他页面时停止。
取消订阅不起作用。如何解决?
解决方案
最基本的方法是将Subscription
调用返回的存储起来subscribe
,然后在离开页面时调用该unsubscribe
方法( Angular 中的生命周期钩子,有关生命周期钩子的更多信息:这里)。Subscription
ngOnDestroy
在您的组件中:
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
推荐阅读
- php - As new to php i am not clear over the jumps betveen php-pages. My code below. is this the right way?
- flask - Socket handshake error when using gunicorn
- ios - 如何设置 CoreML 模型?
- c++ - Correct way to start a function object thread in C++?
- sequelize.js - How to prevent Sequelize from summarizing / reducing result (distict) when including additional association?
- c# - How to convert a $('#form').serializeArray() to c# class object with Ajax?
- delphi - Wine 函数 wine_nt_to_unix_file_name 的 Delphi 映射
- python - Problem with Python not opening up files in the correct order
- javascript - Showing map is not function in react page after refreshing the page
- c# - C#SphereCast如何使用hitInfo