首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MQTTjs库进行无序输出

使用MQTTjs库进行无序输出
EN

Stack Overflow用户
提问于 2020-05-18 18:11:36
回答 1查看 61关注 0票数 2

我有以下应用程序

代码语言:javascript
复制
const RSVP = require('rsvp');
const Mqtt = require('mqtt');
let client = Mqtt.connect("alis://test.mosquitto.org");
let dataPoints = [{ "id": 1, "message": "message-1" }, { "id": 2, "message": "message-2" }, { "id": 3, "message": "message-3" },
    { "id": 4, "message": "message-4" }, { "id": 5, "message": "message-5" }, { "id": 6, "message": "message-6" }
    ];

client.on('connect', async () => {
    main();
});
function main(){
 for(var i=0;i<200;i++) {
  dataPoints.map(async (dataPoint) => {
    console.log("update");
    await publish("message", "key");
  });
 }
}

function publish(topic, payload) {
    return new RSVP.Promise((resolve, reject) => {
        try {
            client.publish(topic,
                payload,
                (error) => {
                    if (error) {
                        reject(error);
                    } else {
                        console.log("publish")
                        resolve();
                    }
                });
        } catch (error) {
            console.log(error);
        }

    });
}

当前输出是我有一系列更新,然后是发布,然后是更新列表,然后是发布列表

代码语言:javascript
复制
update
publish
update
publish
update
publish
....(x times)
update
update
update
publish
publish
publish

是否有一种方法可以将输出转换为更新,然后发布所有迭代。我尝试在应用程序的不同部分添加等待,但仍然没有成功。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-18 18:54:31

由于map函数是异步的,因此节点主循环不会等待当前迭代完成后再执行下一个迭代。

相反,这应该是可行的:

代码语言:javascript
复制
const client = Mqtt.connect('alis://test.mosquitto.org');
const dataPoints = [
  { id: 1, message: 'message-1' },
  { id: 2, message: 'message-2' },
  { id: 3, message: 'message-3' },
  { id: 4, message: 'message-4' },
  { id: 5, message: 'message-5' },
  { id: 6, message: 'message-6' }
];

async function main() {
  for (let i = 0; i < 200; i++) {
    for (const dataPoint in dataPoints) {
      console.log('update');
      await publish('message', dataPoint.message);
    }
  }
}

function publish(topic, payload) {
  return new RSVP.Promise((resolve, reject) => {
    try {
      client.publish(topic, payload, error => {
        if (error) {
          reject(error);
        } else {
          console.log('publish');
          resolve();
        }
      });
    } catch (error) {
      console.log(error);
    }
  });
}

client.on('connect', async () => {
  await main();
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61867244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档