Working with Azure Functions, I want to send a C2D message to IoT Hub, and manage feedback message. How could implement async pattern to manage feedback StatusCode message and log it?
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 from local debugging:
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