RxJS函数从一个observable发出最后一个值然后发出true
问题描述:
Hellow,我试图创建存储最后一项来自OBS的observable(OBS)和subject(SUB)的函数,而SUB具有F值 和发射它(只有它)当孙换成TRxJS函数从一个observable发出最后一个值然后发出true
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;
})
来解决这一点,但它不工作
答
所以它看起来像你想要的东西LIK E:
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)
+0
thx,它很好的起点 – llCorvinuSll
答
我找到了自己的解决方案:
OBS
.buffer(SUB)
.withLatestFrom(SUB)
.map(([buffer, t]) => {
if(!buffer || !buffer.length) {
return null;
}
if(t === T) {
return buffer[buffer.length - 1];
}
return null;
})
.filter((e) => !!e);
这个变体旁边的行为
---a----b----c----d----e----f----g----h-----
------F----------T------------F-------T-----
-----------------c--------------------h-----
,不产生输出,如果F和T的窗口是空的
---a--------------d----e----f----g----h-----
------F----------T------------F-------T-----
--------------------------------------h-----
如果'SUB'连续发出两个'T',应该导致obse当'SUB'为'F'时,仍然可以产生最后收到的值? –
@SergeyKaravaev,不,但它可以固定与distinctUntilChanged – llCorvinuSll