2016-12-31 16 views
1

I持っていつものようにサブスクライブすることを観察できる。待ち次

return oMassChangeOb 
    .subscribe(function (aMassDates) { 
     const oModel = self.getModel("vmCalSpecialDates"); 
     oModel.setProperty("/aActualDates", aMassDates); 
    }, function (oErr) { 
     jQuery.sap.log.fatal(oErr); 
    }); 

私の質問はどのようにするとすぐに観察上記が加入してきたように、他の観察可能を実行すること、ありますか?

私は次のようにそれを行うことができます:

return oMassChangeOb 
    .subscribe(function (aMassDates) { 
     const oModel = self.getModel("vmCalSpecialDates"); 
     oModel.setProperty("/aActualDates", aMassDates); 
     oSaveCancelFooterStateOb 
     .subscribe(function (oBtnState) { 
      const oModel = self.getModel("vmButtonsState"); 
      oModel.setProperty("/bSave", oBtnState.bSave); 
      oModel.setProperty("/bCancel", oBtnState.bCancel) 
     }); 
    }, function (oErr) { 
     jQuery.sap.log.fatal(oErr); 
    }); 

しかし、それは行くための正しい方法であるかどうかは、わかりません。

シナリオを解決することができるnotification objectがありますが、その使用方法はわかりません。

答えて

2

あなたが書いているものから、あなたは基本的に第1の1が終了した後、第2に観察を実行したい、という場合には、単にストリームに両方をチェーン:

return oMassChangeOb 
    .do(function (aMassDates) { 
     const oModel = self.getModel("vmCalSpecialDates"); 
     oModel.setProperty("/aActualDates", aMassDates); 
    }) 
    .switchMapTo(oSaveCancelFooterStateOb) 
    .do((oBtnState) => { 
     const oModel = self.getModel("vmButtonsState"); 
     oModel.setProperty("/bSave", oBtnState.bSave); 
     oModel.setProperty("/bCancel", oBtnState.bCancel) 
    }).subscribe(
     undefined, 
     onErr => jQuery.sap.log.fatal(oErr) 
    ); 

順序が「doesnの場合tはあなたがmergeを両方のストリームを取得して使用することができますかまい:一般的な注意点としては

Rx.Observable.merge(oMassChangeOb, oSaveCancelFooterStateOb) 
    .subscribe(
     undefined, 
     onErr => jQuery.sap.log.fatal(oErr) 
    ); 

:試してみてくださいできるだけ多くのロジックをストリーム自体に移動します(例:上記のように.doを使用して)、購読可能な限りクリーンで一般的なものにすると、複数のストリームを組み合わせる(マージ、チェーンなどを)より簡単に行うことができます(例:

let preparedOMassChangeOb = oMassChangeOb 
    .do(function (aMassDates) { 
     const oModel = self.getModel("vmCalSpecialDates"); 
     oModel.setProperty("/aActualDates", aMassDates); 
    }) 
    .catch(..some error-handler-logic...); 

let preparedOSaveCancelFooterStateOb = oSaveCancelFooterStateOb 
    .do((oBtnState) => { 
     const oModel = self.getModel("vmButtonsState"); 
     oModel.setProperty("/bSave", oBtnState.bSave); 
     oModel.setProperty("/bCancel", oBtnState.bCancel) 
    }); 

Rx.Observable.merge(
    preparedOMassChangeOb, 
    preparedOSaveCancelFooterStateOb 
).subscribe();