发布/订阅中的发布者应为同步或异步

Publisher in Pub/Sub should be Synchronous or Asynchronous?

本文关键字:同步 异步 发布者 发布      更新时间:2023-09-26

我对机制的看法:

  • 模式明智的发布者应该只发布一个事件,而不应该关心该主题/事件的侦听器/订阅者。
  • 在JavaScript的情况下,许多用于Pub/Sub的框架以同步方式发布事件
  • 例如:框架只是维护事件到函数的映射。
  • 在特定事件发生时,它会迭代订阅者并逐个调用函数 -> function_1.apply(context, args),然后function_2.apply(context, args)
  • 这使得它同步,因为除非并且直到function_1完成,否则function_2不知道发生了特定事件。

在JavaScript中实现Pub/Sub的理想方法是什么?

我在发布方法中添加了一个"enqueue"参数,当 true 时,将实际发布包装在 setTimeout(..., 0) 中,以便发布者可以选择立即触发处理,或者将其排队在 JavaScript 执行队列中,允许当前执行路径首先完成。

如果要维护自己的订阅者列表,则可以让 subscription 方法将 enqueue 标志实现为订阅的属性。 因此,发布者可以根据订阅中指示的首选项将各个订阅者排队。