パイプとサブスクライブで遊んでいます。タップでパイプを使用している場合、コンソールに何もログインしません。サブスクライブを使用している場合、機能しています。だから私が間違っているのは何ですか?
import { Observable } from 'rxjs';
import { tap, take } from 'rxjs/operators';
this.store.select(state => state.auth.authUser).pipe(
take(1),
tap((data) => {
//Not Working - no console output
console.log('[Tap] User Data', data);
})
);
this.store.select(state => state.auth.authUser).subscribe((data) => {
// Working - user data output in console
console.log('[Subscribe] User Data', data);
})
RxJs 6、TypeScript、ngxsをAngular 6。
私の答えは2つの部分に分かれています...あなたが尋ねたもの、そしてあなたが必要なもの????。 Observableの値は、アクティブなサブスクリプションがある場合にのみパイプオペレーターを流れます。それが、あなたがこの振る舞いを見ている理由です。したがって、次のようなことを行う必要があります。
this.store.select(state => state.auth.authUser).pipe(
take(1),
tap((data) => {
console.log('[Tap] User Data', data)
})
).subscribe();
しかし、あなたが探しているように見えるのは、状態のスナップショットです。これは次のようにして実行できます。
let data = this.store.selectSnapshot(state => state.auth.authUser);
console.log('[selectSnapshot] User Data', data);
とった! subscribe()を追加する必要があります。だから:
this.store.select(state => state.auth.authUser).pipe(
take(1),
tap((data) => {
console.log('[Tap] User Data', data)
})
).subscribe();
"tap"(またはRxJSの古いバージョンでは "do")-> ロギングなどのアクションまたは副作用を透過的に実行(定義どおり)。しかし、あなたの場合、Observableに「subscribe()」するのを忘れていたため、コンソールに「User Data」が表示されません。
一方、2番目のケースでは、すでにObservableにサブスクライブしています。