0

私はこのようなngrxストアを持ってい export default compose(storeLogger(), combineReducers) ({ auth: authReducer, users: userReducer }); ます: サービスでは、次のことをしようとしています:

import 'rxjs/add/operator/do';
@Injectable()
export class ApiService {

  constructor(private _http: Http, private _store: Store<AppState>, private _updates$: StateUpdates<AppState>) {
     _store.select<Auth>('auth').do(_ => {console.log("token:" +_.token)});
  }

サブスクライブ以外のオペレーターは機能しません。なんで?

4

1 に答える 1

0

なぜこれが起こるのかという一般的な質問がある場合は、Andre Stalz による彼のブログでの説明をご覧ください。

http://staltz.com/how-to-debug-rxjs-code.html

Observables はサブスクライブするまで遅延するため、サブスクリプションはオペレーター チェーンの実行をトリガーします。do および no サブスクリプション内に console.log がある場合、console.log はまったく発生しません。

基本的に、これはオペレーターの典型的な動作です。あなたの例では、「do」演算子を付けました。「do」演算子が返すオブザーバブルへのサブスクリプションがない場合、それは起動しません。ほとんどのオペレーターは、オペレーターが返すオブザーバブルに少なくとも 1 つのサブスクリプションが存在するまで起動しません。マップもその一つです。

http://jsbin.com/bosobuj/edit?html,js,console,output

var source = new Rx.BehaviorSubject(3);
source.do(x=>console.log(x));

var source2 = new Rx.BehaviorSubject(5);
source2.do(x=>console.log(x)).subscribe(x=> x);

source2 "do" のみが実行されるため、出力は 5 です。

于 2016-08-08T12:33:06.247 に答える