我有这样的代码:
const i = 0;
const subject = webSocket(WEBSOCKET_API_URL);
subject.subscribe(
msg => {
if(i===0) {
firstHandler();
}
if(i===1) {
secondHandler();
}
else {
globalHanlder();
}
if(i <= 2) {
i++;
}
}
);
subject.next({
event: "testSubscribe",
});
我想订阅一个WebSocket通道,发送一条消息,并以不同于其他方式处理2个第一响应。
如上所述,我做到了。 我不喜欢解决方案。 而且我想知道是否有一些更漂亮的方法可以处理使用rxjs的第一个和第二个函数调用。
您有什么想法吗?
答案 0 :(得分:1)
我认为您的解决方案很好。不需要带有Observable运算符的清洁程序,但遵循以下操作可以完成相同的操作
const 1st=subject.pipe(take(2),last(),tap(()=>firstHandler()))
const 2nd=subject.pipe(first(),tap(()=>secondHandler()))
const other=subject.pipe(skip(2),tap(()=>globalHandler()))
merge(1st,2nd,other).subscribe()
答案 1 :(得分:1)
就我个人而言,我的做法几乎与您一样。也许我宁愿让i
变量在链内定义。也许如果您不需要subject
发出的值,则可以将它们替换为索引。
subject.pipe(
map((value, index) => index),
).subscribe(index => {
if (index === 0) {
firstHandler();
} else if (index === 1) {
secondHandler();
} else {
globalHanlder();
}
});