typescript - rabbitmq 消费函数/channel.ack
问题描述
我有以下功能可以使用打字稿在我的 rabbitmq 上使用:
async consume(
queue: string,
callback: (message: ConsumeMessage | null) => void,
) {
return this.channel.consume(queue, message => {
callback(message);
this.channel.ack(message);
});
}
这个频道。consume 接收队列,ConsumeMessage 类型的消息但是this.channel.ack 需要从lib amqlib 接收一个MESSAGE 类型作为参数
但由于我的消息是使用消息,我收到以下错误:
'ConsumeMessage | 类型的参数 null '不可分配给'Message'类型的参数。类型“null”不可分配给类型“消息”.ts (2345)
当我尝试使用 .ack
如果出现错误,我也对如何实施治疗有疑问
解决方案
您收到该错误是因为您无法在需要ConsumeMessage | null
a 的地方使用(我认为是)您的自定义类型amqplib.Message | null
。TypeScript 编译器只能保证一个对象匹配Message
将被传递到回调中,它不能保证你的额外属性会在那里。
如果出现错误,我也对如何实施治疗有疑问
您可能希望添加一个err
参数作为回调的第一个参数,并使用自定义错误 if message
is调用它null
,这在消费者被取消时发生。我假设您正在使用amqplib/callback_api
.
推荐阅读
- java - 从 RecyclerView 中删除多个选定项目
- javascript - Screenleap API 与 Reactjs 的集成
- asp.net-core-mvc - 如何让 TagHelper 只呈现没有父标签的纯文本?
- c++ - 模板类错误:未定义的引用
- java - 如何在警报对话框中保存多选状态?
- jquery - Shopify 预测搜索 JQuery GET 运行两次
- java - Java、Selenium、Chrome - 无法单击按钮,即使它似乎能够找到它就好了
- android-studio - 在 IntelliJ IDEA (Android Studio) 中声明后是否可以在同一行上编写 JavaDoc?
- javascript - 使用议程进行作业计划未运行
- javascript - 将条件渲染移至单独的组件