例如,我目前正在調用從Angular 2的HTTP返回的Observable退訂。是否可以將Teardown邏輯添加到已存在的Observable中?
但我有一些自定義邏輯圍繞它。
是否可以將自定義拆卸邏輯添加到已存在的Observable中,如從Angular 2的HTTP返回的邏輯?
沿着Observable.prototype.whenUnsubscribe(customTeardownLogic)行的東西可能嗎?
例如,我目前正在調用從Angular 2的HTTP返回的Observable退訂。是否可以將Teardown邏輯添加到已存在的Observable中?
但我有一些自定義邏輯圍繞它。
是否可以將自定義拆卸邏輯添加到已存在的Observable中,如從Angular 2的HTTP返回的邏輯?
沿着Observable.prototype.whenUnsubscribe(customTeardownLogic)行的東西可能嗎?
這可能不是正是你想要的,但它可以幫助:
假設你有這樣的事情(從the Hero Guide在角2的網站上得到):
(打字稿)
@Injectable()
export class HeroService {
private heroesUrl = 'api/heroes'; // URL to web API
constructor (private http: Http) {}
getHeroes(): Observable<Hero[]> {
return this.http.get(this.heroesUrl)
.map(this.extractData);
}
private extractData(res: Response) {
let body = res.json();
return body.data || { };
}
}
// And somewhere else in your code you do:
let subscription = service.getHeroes().subscribe(... do stuff here);
// And later on you do:
subscription.unsubscribe();
如果你想添加一些自定義的拆卸邏輯,你可以用自己的包裝Angular 2返回的Observable:
getHeroes(): Observable<Hero[]> {
return Observable.create(
//Let's provide a subscribe function
(observer: any) => {
const subscription = this.http.get(this.heroesUrl)
.map(this.extractData).subscribe(observer);
// Now let's return a tear-down/unsubscribe function
return() => {
subscription.unsubscribe();
this.myTearDownLogic();
}
}
);
要回答確切的問題,不,你不能添加拆解邏輯到現有的可觀察。
然而,可觀察(您可能會或可能不會擁有控制權)拆卸邏輯和拆卸邏輯的觀察者 - 即,您的訂閱 - 這是你的管理。
這聽起來像你想使用add()
方法使用後者拆機邏輯:
anyObservable.subscribe(function() {
// my observer code
}).add(function() {
// my teardown logic
});
上面我已經使用拆機邏輯功能表現出來,但訂閱也可以發送,它提供了一個當這個關閉(完成/錯誤)時,可以輕鬆取消訂閱任何數量的其他訂閱。
請注意,如果在添加了拆卸邏輯時observable處於關閉狀態,它將立即執行。