RxJS:Single Observables在多个独立可观察量方面是否有任何缺点?

时间:2017-09-27 09:21:36

标签: javascript node.js rxjs

RxJS:在应用程序中的Node.js中的服务器上我正在努力确定哪个会更好:处理来自可观察量的所有传出排放的单个流(进一步发展)由套接字连接发出的),或将我的observable划分为类别。单向另一种方式有任何缺点吗?让我说明一下我想问的问题......

例如:如果你要创建一个聊天应用程序,你会设置一个流,并通过聊天室筛选出订阅,例如:

handleEverythingObservable // STREAM OF ALL ROOMS
  .filter(obj => obj.chatRoom === joinedChatRoom)
  .subscribe(emitToConnectedSocket);

或者您是否有一个对象将流划分为类别(如房间)并具有多个单独的流,例如:

objectOfObservables = {
  room1: room1Observable, // STREAM OF A SINGLE ROOM
  room2: room2Observable // STREAM OF A SINGLE ROOM
};

objectOfObservables.room1.subscribe(emitToConnectedSocket);
// NO FILTERING NECESSARY

是否有任何设计原则会导致您选择一种方式而不是另一种方式,或者您是否会做一些完全不同的事情?选择其中一种模式会有任何不利之处吗?如果单个observable必须处理每个对象,似乎可能有阻塞的机会。  我想如果我将流分开,我可以在它们空的时候终止它们,并在用户寻找特定房间时重新打开它们。

1 个答案:

答案 0 :(得分:1)

在你的用例中,我会选择集中观察。

    关于房间连接observable的
  1. 是非常相似的流,除了房间的名称,没有多大的意义将它们分开并增加复杂性

  2. 在阻塞的情况下,任何一种方法,你创建的observable都应该支持组合,切片,延迟等,以便重用。它是否会创建阻塞通常取决于你将要制作的那些小的可观察段,例如,当它失败时,忘记重试observable,或者错误处理等。你总是使用.do()运算符进行调试

  3. 如果您需要

    ,可以随时创建单独的房间流

    让roomA $ = handleEverythingObservable.filter(obj => obj.chatRoom === joinedChatRoom).filter(obj => obj.name ==='roomA')

  4. 在我看来,拆分比合并更容易(如果在某些情况下处理得不好,可能会遇到异步/同步问题)并允许更好的灵活性