等到下一个其他observable订阅

时间:2016-12-31 13:34:46

标签: javascript rxjs rxjs5

我有一个可以照常订阅的观察者:

  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可以解决方案,但不知道如何使用它。

1 个答案:

答案 0 :(得分:2)

根据你所写的内容,你基本上想要在第一个observable完成后运行第二个observable,在这种情况下,只需将它们链接到一个流中:

#background1 {
  width: 100%;
  height: 100%;
  position: absolute;
  opacity: 0.3;
  left: 0;
  background-size: cover;
  background-image: url("https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Kiyomizu-dera%2C_Kyoto%2C_November_2016_-01.jpg/800px-Kiyomizu-dera%2C_Kyoto%2C_November_2016_-01.jpg");
}

如果订单无关紧要,您可以同时使用两个流并使用merge

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

作为一般性说明:尝试将尽可能多的逻辑移动到流本身(例如,通过使用Rx.Observable.merge(oMassChangeOb, oSaveCancelFooterStateOb) .subscribe( undefined, onErr => jQuery.sap.log.fatal(oErr) ); ,如上所述)并使订阅尽可能干净和通用,这将使它成为可能更容易组合(合并,链,等)多个流,例如:

.do