第一和第二个Observer订阅处理程序

时间:2019-03-05 00:10:54

标签: websocket rxjs subject

我有这样的代码:

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的第一个和第二个函数调用。

您有什么想法吗?

2 个答案:

答案 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();
  }
});