根据反应功能范式

According to reactive functional paradigm

我有以下功能:

_processCalenderSelect: function (oCalendarSelectOb, oEditButton) {
  let self = this;

  return oCalendarSelectOb
    .switchMap(function (oCalendar) {
      return oEditButton.getPressed()? Rx.Observable.of(oCalendar) : Rx.Observable.never();
    })
    .mergeMap(function (oCalendar) {
      return Rx.Observable.from(oCalendar.getSource().getSelectedDates());
    })
    .map(function (oDateRange) {
      return oDateRange.getStartDate();
    });

},

第一个参数只是一个可观察对象,第二个是一个对象。

看一下switchMap方法,我问的是按钮是否按下。

我的问题是,当我请求闭包内的按钮状态时,我是否违反了响应式函数范式?

.switchMap(function (oCalendar) {
      return oEditButton.getPressed()? Rx.Observable.of(oCalendar) : Rx.Observable.never();
    })

不知道你的流是如何触发的,这是 "technically O.k.",但是你可能已经猜到了,你有点打破了 "spirit" 具有纯无状态函数的引入非stream-state,oEditButton - 流不能保证每次都具有相同输入的相同结果,因为有一些 "external" 状态(按钮是否按下)。

因此 "cleaner" 方法(不确定这是否适用于您的应用程序)具有类似 oEditButtonClicked$-事件流的东西,它将触发选定日期的处理。

oEditButtonClicked$
    .switchMapTo(oCalenderSelect$)
    .mergeMap(cal => Rx.Obserbalbe.from(cal.getSource....))

附带说明一下,如果您无法引入该事件流,您仍然可以使用 skipWhile:

改进您的代码
return oCalendarSelectOb
    .skipWhile(() => oEditButton.getPressed())
    .mergeMap(function (oCalendar) {
      return Rx.Observable.from(oCalendar.getSource().getSelectedDates());
    })
    .map(function (oDateRange) {
      return oDateRange.getStartDate();
    });

(这并没有解决最初的问题,只是一个侧面的提示)