在指導書角2,它說:處理中的訂閱時觀察到的完成
「可觀察運營商的默認行爲是儘快處置訂閱作爲.complete()或.error()消息請記住,RxJS的設計目的是在大多數時間以「隨意而忘卻」的方式使用。「
在前面的頁面中有一個可觀察和訂閱的例子。
你可以在那裏看到,在3秒後,可見的「.complete()」。但是當再次點擊Init()按鈕並調用init()方法時,用戶仍然被通知。那麼作者意味着什麼 「處置訂閱」?
代碼:
import {Component} from '@angular/core';
import {Observable} from 'rxjs/Observable';
@Component({
selector: 'app',
template: `
<b>Angular 2 Component Using Observables!</b>
<h6 style="margin-bottom: 0">VALUES:</h6>
<div *ngFor="let value of values">- {{ value }}</div>
<h6 style="margin-bottom: 0">ERRORs:</h6>
<div>Errors: {{anyErrors}}</div>
<h6 style="margin-bottom: 0">FINISHED:</h6>
<div>Finished: {{ finished }}</div>
<button style="margin-top: 2rem;" (click)="init()">Init</button>
`
})
export class MyApp {
private data: Observable<Array<number>>;
private values: Array<number> = [];
private anyErrors: boolean;
private finished: boolean;
constructor() {
}
init() {
this.data = new Observable(observer => {
setTimeout(() => {
observer.next(42);
}, 1000);
setTimeout(() => {
observer.next(43);
}, 2000);
setTimeout(() => {
observer.complete();
}, 3000);
});
let subscription = this.data.subscribe(
value => this.values.push(value),
error => this.anyErrors = true,
() => this.finished = true
);
}
}