Pub/Sub 中的发布者应该是同步的还是异步的?
Publisher in Pub/Sub should be Synchronous or Asynchronous?
我对机制的看法:
- 模式明智的发布者应该只发布一个事件,而不应该关心该主题/事件的听众/订阅者。
- 在 JavaScript 的情况下,许多 Pub / Sub 框架以同步方式发布事件
- 例如:框架只维护事件到函数的映射。
- 在特定事件发生时,它逐一迭代订阅者和调用函数 -> function_1.apply(context, args) 然后是 function_2.apply(context, args)
- 这使其同步,因为除非 function_1 完成,function_2 不知道发生了特定事件。
在 JavaScript 中实现发布/订阅的理想方式是什么?
我向我的发布方法添加了一个 "enqueue" 参数,当它为真时,将实际发布包装在 setTimeout(..., 0) 中,以便发布者可以选择立即触发处理,或者将其排入 JavaScript 执行队列,允许当前执行路径首先完成。
如果您要维护自己的订阅者列表,则可以让订阅方法将入队标志实现为订阅的一个属性。因此,发布者可以根据订阅中指示的偏好对各个订阅者进行排队。
我对机制的看法:
- 模式明智的发布者应该只发布一个事件,而不应该关心该主题/事件的听众/订阅者。
- 在 JavaScript 的情况下,许多 Pub / Sub 框架以同步方式发布事件
- 例如:框架只维护事件到函数的映射。
- 在特定事件发生时,它逐一迭代订阅者和调用函数 -> function_1.apply(context, args) 然后是 function_2.apply(context, args)
- 这使其同步,因为除非 function_1 完成,function_2 不知道发生了特定事件。
在 JavaScript 中实现发布/订阅的理想方式是什么?
我向我的发布方法添加了一个 "enqueue" 参数,当它为真时,将实际发布包装在 setTimeout(..., 0) 中,以便发布者可以选择立即触发处理,或者将其排入 JavaScript 执行队列,允许当前执行路径首先完成。
如果您要维护自己的订阅者列表,则可以让订阅方法将入队标志实现为订阅的一个属性。因此,发布者可以根据订阅中指示的偏好对各个订阅者进行排队。