0

我的观点的机制:Pub/Sub中的发布者应该是Synchronous还是Asynchronous?

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

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

+0

你刚才说的“框架”,不说哪个框架。发布者是异步的。订阅者也是异步的,但是由于JS是单线程的,你不能使订阅者的异步**执行**。如果你有一个用户阻塞,整个事情阻塞,直到完成,是的,回调地图中的下一个功能将不会做任何事,直到前一个完成。 – Mjh

+0

@Mjh虽然我们不能让订阅者的执行异步,我们不能只是给JavaScript运行时执行函数负责,而不是通过调用/应用一个接一个地调用函数吗? – vivekj011

+0

所以如果我得到这个权利,你的问题是你可以执行函数,但不是按照它们在回调映射中的定义顺序吗?无论你做什么,这些功能都会一个接一个地执行。现在的问题是,这些函数是阻塞还是非阻塞? – Mjh

回答

2

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

如果您正在维护您自己的订阅者列表,那么您可以让subscribe方法实现enqueue标志作为订阅的一个属性。因此,发行商可以根据他们的偏好排队单个订阅者,如他们的订阅中所指示的。

+0

订户可以要求的另一件事是优先? – vivekj011

相关问题