2016-08-07 5 views
0

ん: export default compose(storeLogger(), combineReducers) ({ auth: authReducer, users: userReducer }); 私は次の操作を実行しようとするサービスで:RxJsは、作品を購読するが、マップは、私はこのようなngrx店舗はありませ

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)}); 
    } 

購読以外にオペレータの作品を。どうして?

+0

適切な 'rxjs/add'ミックスインはどこにインポートしましたか?あなたは[mcve]を与えることができますか? – jonrsharpe

+0

これは、 '' import 'rxjs/add/operator/do'; '' 'の上にありますか? – apreg

答えて

0

これがなぜ起こるのか全般的に尋ねる場合は、Andre Stalzのブログで説明します。

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

あなたが購読するまで観測が怠け者なので、サブスクリプションは、実行するオペレータチェーンをトリガします。 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ので、出力は5です。

+0

もう1つの注意点は、doまたはmap演算子は、observable上の新しい値の各emitで各サブスクリプションに対して1回実行されることです。したがって、3つのサブスクリプションがあり、新しい値が発行された場合、演算子は3回実行されます。 – wiredprogrammer

関連する問題