[英]RxJS function that emit last value from one observable then other emit true
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;
})
但它不起作用
所以你似乎想要這樣的東西:
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)
我發現自己的解決方案
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-----
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.