RxJS函数从一个observable发出最后一个值,然后另一个发出true

时间:2017-08-10 15:59:50

标签: javascript typescript rxjs rxjs5

Hellow,我正在尝试创建可观察(OBS)和主题(SUB)的功能,它存储来自OBS的最后一项,而SUB有F值, 当SUN变为T

时,发出它(并且只发出它)
   OBS ---a----b----c----d----e----f----g----h-----
   SUB ------F----------T------------F-------T-----
   OUT -----------------c--------------------h-----

我试图用

来解决这个问题
OBS.window(SUB)
        .withLatestFrom(SUB)
        .switchMap(([window, status]) => {

            if(status === F) {
                return window.combineLatest(SUB, (cmd, status) => {
                    if(status === T) {
                        return null;
                    };

                    return cmd;
                }).last((e) => {
                    return !!e;
                })
            }

            return Observable.empty<Command>();
        }).filter((cmd) => {
            return !!cmd;
        })

但它不起作用

2 个答案:

答案 0 :(得分:2)

所以看起来你想要这样的东西:

SUB
  // Only emit changes in the status
  .distinctUntilChanged()
  // Only forward true values down stream
  .filter(t => t === T)
  // Only emit the latest from OBS when you get a T from SUB
  // Remap it so only cmd is forwarded
  .withLatestFrom(OBS, (_, cmd) => cmd)

答案 1 :(得分:2)

我找到了自己的解决方案:

 ---a----b----c----d----e----f----g----h-----
 ------F----------T------------F-------T-----
 -----------------c--------------------h-----

此变体具有下一个行为

 ---a--------------d----e----f----g----h-----
 ------F----------T------------F-------T-----
 --------------------------------------h-----
如果F和T之间的窗口为空,

并且不生成输出

{{1}}