2017-01-06 9 views
0

私は次のような観察が可能で、モデルの変更を検証します。observableが購読されない理由

コードスニペットは、以下のようになります。

const oSaveCancelStateOb = this.determineSaveCancelStateOb(oTableItemChanges, oSaveCancelStateModelOb); 
    oSaveCancelStateOb.subscribe(function (oOb) { 
    console.log("Subscribe 1"); 
    }); 

    oDelBtnOb 
    .switchMapTo(oSaveCancelStateOb) 
    .subscribe(function (oOb) { 
     console.log("Subscribe 2"); 
    }); 

determineSaveCancelStateObの実装は以下のようになります。

determineSaveCancelStateOb: function (oInspectionServiceOb, oSaveCancelStateModelOb) { 
    return oInspectionServiceOb 
    .map(function (bState) { 
     return bState ? {bSave: true, bCancel: true} : {bSave: false, bCancel: false}; 
    }) 
    .switchMap(function (oState) { 
     return oSaveCancelStateModelOb 
     .map(function (oModel) { 
      return {oModel: oModel, oState: oState}; 
     }) 
    }); 
}, 

代は寒い観測可能で、モデルに変更された場合oSaveCancelStateObは、検証。

第2の観察可能なoDelBtnObは注目に値する、それはマウスボタンのクリックで聞きます。

私はボタンをクリックしたときに私の期待は、それはコンソール上で私を見る必要がありますされています

Subscribe 1 
Subscribe 2 

しかし、私が持っているだけ

Subscribe 2 

なぜ最初に観察取得していませんサブスクライブ?

更新

次のコードスニペットに見てみましょう:私は、ドキュメントをクリックすると

//Create an observable that emits a value every second 
const sample1$ = Rx.Observable.of(true); 
sample1$.subscribe(val => console.log(val)) 
//Create an observable that emits every time document is clicked 
const sample2$ = Rx.Observable.fromEvent(document, 'click'); 

sample2$.switchMapTo(sample1$).subscribe(val => console.log(val)) 

、私は二回true意志の出力を期待しています。

答えて

1

私はあなたの期待が間違っているコードを理解しています。あなたの最後の例では次の処理が行われます。

  1. sample1$上のサブスクリプションが実行され、ストリーム内で、利用可能な各値のすべての値がコンソールにそれを発する処理するコードをロードした後。その後、sample1$サブスクリプションが完了します。
  2. sample1$ストリームに文書switchMapToをクリックすると、その値(trueのみ)が放出されてコンソールに送信され、その後、この観察可能なデータが完成します。
+0

同じように動作しています。 –

+0

あなたが言及した2番目の点は、最初の購読は文書をクリックすると再び実行されませんか? –

+0

@zero_codingが正しい場合、最初のサブスクリプションはドキュメント –

関連する問題