angular - 我如何能 console.log 一個 observable 的值?
我正在使用 Angular 2 和 RxJS,我想知道我如何能做到以下幾點:
在我的元件中,我已定義如下:
count: Observable<number>;在我的元件建構子中,我正在做以下事情:
constructor(
private store: Store<any>
) {
this.count = this.store.select<any>(state => state.count);
}
我如何查看 count 的當前值?現在如果我 console.log(this.count),我會得到一個很大的物件來記錄。如果我只想查看 this.count 的值,我該怎麼做?
答案#1
使用常規的可觀察對象時,你只有在值改變時才能獲取它,因此如果你想在控制台輸出該值,你需要在訂閱中使用 console.log:
constructor(
private store: Store<any>
) {
this.count = this.store.select<any>(state => state.count);
this.count.subscribe(res => console.log(res));
}
然而,如果你想隨時能夠獲取當前值,你將需要的是 BehaviorSubject(它在功能上結合了 Observable 和 Observer……像使用 Observable 一樣從 rxjs 庫中導入它)。
private count:BehaviorSubject<number> = new BehaviorSubject<number>(0);
constructor(
private store: Store<any>
) {
let self = this;
self.store.select<any>(state => self.count.next(state.count));
}
那麼,任何時候你想獲取計數的當前值,你可以調用 this.count.getValue();要更改值,你可以調用 this.count.next(<你想傳入的值>)。這應該能得到你想要的結果。
答案#2
在最近版本的 RxJS(如果我沒記錯,從 6.0 開始)中,正確的做法是使用 .pipe()。至於回答你的問題,你需要 tap 操作符。
constructor(
private store: Store<any>
) {
this.count = this.store.select<any>(state => state.count).pipe(
tap(countValue => console.log('Count: ', countValue))
);
}
