Nodejs、Mqtt:连接和回调顺序错误?

问题描述 投票:0回答:2

我想使用 nodejs 的 mqtt 包。无论我在哪里,我都能找到这样的代码示例(来自 github 上的官方文档):

const mqtt = require('mqtt')
const client  = mqtt.connect('mqtt://test.mosquitto.org')

client.on('connect', function () {
  client.subscribe('presence', function (err) {
    if (!err) {
      client.publish('presence', 'Hello mqtt')
    }
  })
})

client.on('message', function (topic, message) {
  // message is Buffer
  console.log(message.toString())
  client.end()
})

我的问题是连接:mqtt.connect() 在回调之前:client.on('connect', ...)。我认为这是错误的顺序。

这不同于实例化客户端的 python 包,然后声明“on connect”和其他回调,然后才使用 client.connect() 方法。

有没有办法像 python 包中那样保证正确的顺序?

javascript node.js mqtt
2个回答
0
投票

我不知道 python 包上写的是什么,但是如果我们看官方 Mqtt 码头 正确的顺序是:

  1. 连接到 mqtt 服务器
  2. 然后将命令发送到您的客户端订阅了一些主题的 mqtt 服务器
  3. 然后在我们的节点层上我们添加一些回调(
    client.on('message', console.log)
    )来处理传入的消息

-1
投票

您可以使用 promises 来做到这一点。

您可以做的是:

const client = await mqtt.connect('mqtt://test.mosquitto.org')

因此,在

mqtt.connect
上添加事件侦听器之前,您将能够等待
client
的结果。我强烈建议去 Javascript.info

上查看关于它们的精彩解释
© www.soinside.com 2019 - 2024. All rights reserved.