У меня есть такой код:
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.
есть предложения?


Я думаю, что ваше решение в порядке. Не обязательный очиститель с оператором 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()
Лично я сделал бы это почти так же, как это сделали вы. Может быть, я предпочел бы, чтобы переменная i была определена внутри цепочки. Возможно, если вам не нужны значения, испускаемые subject, вы можете заменить их индексами.
subject.pipe(
map((value, index) => index),
).subscribe(index => {
if (index === 0) {
firstHandler();
} else if (index === 1) {
secondHandler();
} else {
globalHanlder();
}
});