我正在使用CocoaMQTT来连接和发布事件。要发布,重要的是我连接到 MQTT。但连接是异步的,发布也是异步的。我希望它是顺序的,首先它应该连接,一旦连接然后发布,例如,如果连接发生在 5 分钟后,那么发布应该在那之后发生。
https://github.com/emqtt/CocoaMQTT
我究竟该怎么做?
这是我的代码:
class ViewController: UIViewController {
var iot: MQTTDelegate!
@IBAction func click(_ sender: Any) {
self.iot = IoT(
withClientId: "clientId",
host: "host",
port: 1883
)
iot.connect(username: "username", password: "token")
iot.publish(topic: "hello", message: "")
}
}
如果我将连接移动到一个单独的按钮,那么它就会工作,因为首先我单击连接按钮,然后单击"单击"按钮,使其按顺序排列。如何使上述代码按顺序排列?
我使用 PromiseKit 来承诺代码,但我不知道到底要满足什么才能连接。
看起来您正在尝试建立与 MQTT 服务器的连接并将消息发布到主题,但由于异步行为,该连接是在消息发布后建立的。
要解决此问题,您可以在发布消息之前使用 MQTTClient 类的 connect(( 方法建立连接。connect(( 方法采用在建立连接或发生错误时调用的完成块。
下面是如何在发布消息之前修改代码以建立连接的示例:
client.connect { error in
if error == nil {
// Connection was successful
client.publish("topic", withString: "Hello, World!")
} else {
// There was an error connecting to the MQTT server
}
}
这样,在消息发布之前就建立了与 MQTT 服务器的连接,并在连接准备就绪后立即发送消息。