【问题标题】:First and second Observer subscribe handler第一个和第二个观察者订阅处理程序
【发布时间】:2019-03-05 00:10:54
【问题描述】:

我有这样的代码:

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

你有什么想法吗?

【问题讨论】:

    标签: websocket rxjs subject


    【解决方案1】:

    就我个人而言,我的做法几乎与您相同。也许我宁愿让i 变量在链中定义。也许如果您不需要subject 发出的值,您可以将它们替换为索引。

    subject.pipe(
      map((value, index) => index),
    ).subscribe(index => {
      if (index === 0) {
        firstHandler();
      } else if (index === 1) {
        secondHandler();
      } else {
        globalHanlder();
      }
    });
    

    【讨论】:

      【解决方案2】:

      我认为您的解决方案很好。不需要使用 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()
      

      【讨论】:

        猜你喜欢
        • 2018-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-11
        • 2016-06-26
        • 2017-03-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多