首页 > 解决方案 > 解决 JS 中的异步生产者-消费者问题

问题描述

我有一个数据生产者和一个数据消费者。生产者异步生产,反过来我希望消费者在有数据消费时异步消费。

我解决这个问题的直接想法是使用一些具有等待移位/获取的队列对象,就像python标准中的这个异步队列

但是,我搜索并找不到任何具有这种类型的数据结构供我使用的 JS 库。我原以为这将是一种常见的模式。

在 JS 中解决这个问题的常见模式是什么,是否有任何库可以提供帮助?

标签: javascriptnode.jsecmascript-6

解决方案


如果数据的生产者只是自发地生产数据,而消费者只是想知道何时有一些新数据,那么这听起来就像消费者应该订阅一个在有新数据时会触发的事件。您可以只使用 node.js 中的 EventEmitter 对象来创建消费者可以收听的发射器,并且只要有新数据,生产者就会触发和事件。不需要外部库来实现这一点,因为内置EventEmitter对象具有注册通知和触发通知所需的所有工具。

如果数据的消费者请求数据,生产者再去异步获取,那么这只是一个典型的异步API。API 可能应该返回一个承诺,并且生产者将在准备好新数据时使用新数据解决该承诺,或者如果检索数据时出错则拒绝它。

根据您提供的一点点描述,我认为没有任何特别需要精心设计的排队系统。这听起来就像发布/订阅或简单的事件通知系统。如果问题更复杂,请向我们提供有关数据生产者的更多详细信息,以便我们更好地将 node.js 中可用的工具与您的特定问题的需求相匹配。


推荐阅读