跳过进一步的方法链接

时间:2016-12-19 19:26:28

标签: javascript rxjs

我有以下观察:

_processSelectedPlantWcOb: function (oSelect) {
      let self = this;
      return oSelect
        .map(function (oEvent) {
          // Clean up dates
          let oModel = self.getModel("vmCalSpecialDates");
          oModel.setProperty("/specialDates", []);

          return oEvent.getSource();
        })
        .map(function (oControl) {
          let oItem = oControl.getSelectedItem();
          let aKeys = oItem.getKey().split("/");
          return {plant: aKeys[0], wc: aKeys[1]};
        })
        .flatMap(function (oSelectedItem) {

          let oModel = self.getModel("weightProtocolService");
          let oPlantFilter = new Filter("Plant", sap.ui.model.FilterOperator.EQ, oSelectedItem.plant);
          let oWcFilter = new Filter("WorkCenter", sap.ui.model.FilterOperator.EQ, oSelectedItem.wc);

          return Rx.Observable.create(function (observer) {
            oModel.read("/CostCenterCalendarSet", {
              success: function (oData, oResponse) {
                observer.next(oResponse);
              },
              error: function (oError) {
                observer.error(oError);
              },
              filters: [oPlantFilter, oWcFilter]
            });
          });
        })
        .map(function (oData) {
          return oData.data.results;
        })
        .filter(function (aData) {
          return aData.length > 0;
        })
        .flatMap(function (aData) {
          return Rx.Observable.from(aData)
        })
        .filter(function (oData) {
          let oToday = new Date();
          return oData.InspectionDate.getTime() > oToday.getTime();
        });
    },

假设我有一个实例变量x = false,将来会更改为x = true。在第二张地图上,我想询问是否x is true。如果是,它应该订阅它,流将停在那里。

澄清我的意思。考虑第二张地图。这就是它的样子:

.map(function (oControl) {
    if(x === true) {
        // Subscribe it. stop the stream
    }
    let oItem = oControl.getSelectedItem();
    let aKeys = oItem.getKey().split("/");
    return {plant: aKeys[0], wc: aKeys[1]};
})

1 个答案:

答案 0 :(得分:0)

如果您想根据x = true完成广告系列,我建议您查看takeUntil运算符,而不是变量x,请使用Subjectx成为true时会发出一次。

主题是一个Observable和一个Observer,因此您可以在takeUntil中使用它来让您的流完成。