我正在amqp.node(amqplib)上面开发一个新库,基本上我们不需要所有的RabbitMQ功能。所以,我正在创建一个简单的库,以方便我们项目的使用。
这个新库将返回Promises。因此,例如,订阅队列将返回关于Ok和Error的Promise。但是,我应该怎样处理以后的问题呢?断开连接,重新连接,删除队列等等?这将在承诺解决后发生。我的新班级应该发出自己的错误吗?这是处理承诺的好方法吗?
答案 0 :(得分:4)
承诺是一次性设备。因此,它们只是一次性状态转换的正确设计工具。一旦他们被解决或拒绝,他们就会陷入这种状态。在那之后,你要么必须对新的运营有新的承诺,要么承诺不是真正合适的方案,而你更喜欢事件通知。
所以,如果你可以断开连接,然后重新连接,然后断开连接等等......你要么必须为每个州的过渡创造新的承诺,要么承诺并不是最简单的实现和你真正想要的只是一种能够为各种事件订阅听众(从eventEmitter派生并发出其他人可以听到的有趣事件)。
我没有声称完全了解您正在尝试构建的内容,但您的描述的某些部分听起来可能是您希望在项目的大部分内容中使用更多的事件通知方案,而不是承诺。< / p>
仅供参考,这里有一些关于不同通知方案的有趣文章:
Callbacks, Promises, Signals and Events
JavaScript Asynchronous Architectures: Events vs. Promises
Event Emitter, Pub Sub or Deferred Promises … which should you choose?
答案 1 :(得分:0)