node.js - 如何实现异步模式以接收来自 Azure IoT 中心 C2D 的反馈
问题描述
使用 Azure Functions,我想向 IoT Hub 发送 C2D 消息,并管理反馈消息。如何实现异步模式来管理反馈 StatusCode 消息并记录它?
const IotHubClient = require("azure-iothub").Client;
const MessageC2D = require("azure-iot-common").Message;
const connectionString = process.env.IOTHUB_CONNECTION_STRING
const serviceClientIotHub = IotHubClient.fromConnectionString(connectionString);
module.exports = async(context, IoTHubMessages) => {
for (const message of IoTHubMessages) {
if(message.temp > 50){
const messagec2d = new MessageC2D(`{"state": "off"}`);
messagec2d.ack = 'full';
messagec2d.messageId = 'id001';
serviceClientIotHub.getFeedbackReceiver(context,receiveFeedback);
serviceClientIotHub.send(message.targetDevice, messagec2d, printResultFor(context, 'send'));
}
}
function receiveFeedback (context, err, receiver){
try {
receiver.on('message', (context, msg) => {
context.log('Feedback message:');
context.log(msg.getData().toString('utf-8'));
return msg;
});
} catch (e) { //UnhandledPromiseRejectionWarning: Unhandled promise rejection
context.log(e.message);
context.log.error('ERROR', e);
throw e;
}
};
function printResultFor(context, op) {
return function printResult(err, res) {
if (err) context.log(op + ' error: ' + err.toString());
if (res) context.log(op + ' status: ' + res.constructor.name);
};
}
来自本地调试的警告:
Warning: Unexpected call to 'log' on the context object after function execution has completed. Please check for asynchronous calls that are not awaited or calls to 'done' made before function execution completes. Function name: ic_IoTHub_EventHub. Invocation Id: 824b849f-6be3-4de1-a175-bb82280ef4e1. Learn more: https://go.microsoft.com/fwlink/?linkid=2097909
解决方案
推荐阅读
- git - 即使在将公共 ssh 密钥添加到 Git Hub 之后,也无法将更改从我的本地系统推送到源站
- python - Python Beatifulsoup 无法正确使用 selenium 的结果
- vba - 如何从今天收到的 Outlook 邮件中提取电子邮件附件?
- azure - 特定国家/地区用户应访问特定国家/地区的网站,但数据库应跨地区同步
- c# - 如何使用来自另一个分部类的分部类中的方法
- php - laravel和vue如何同时保存和更新
- python - 有没有办法从模型中获取并显示用户发布的每个广告的图像数量
- networking - 端口 80 的端口转发不适用于来自 LAN 内部的请求(适用于 WAN)
- javascript - SortableJS:放置请求后项目更改位置
- jquery - jQuery select:option 为什么当我选择选项一来显示特定字段但它打开所有字段时?