IOTHubMessage.forEach 不是函数?

IOTHubMessage.forEach is not a function?

谁能告诉我如何解析这个问题?

我有一个抛出的错误消息,当我创建 azure cosmossDB 时,我的 cosmosDB 输出绑定抛出 IOTHubMessage.forEach 不是函数的消息;

module.exports = function (context, IoTHubMessages) {
    context.log(`JavaScript eventhub trigger function called for message array: ${IoTHubMessages}`);

    var count = 0;
    var totalTemperature = 0.0;
    var totalHumidity = 0.0;
    var deviceId = "*****";

    IoTHubMessages.forEach(message => {
        context.log(`Processed message: ${message}`);
        count++;
        totalTemperature += message.temperature;
        totalHumidity += message.humidity;
        deviceId = message.deviceId;
    });

    var output = {
        "deviceId": deviceId,
        "measurementsCount": count,
        "averageTemperature": totalTemperature / count,
        "averageHumidity": totalHumidity / count
    };

    context.log('Output content: ${output}');
    context.bindings.outputDocument = output;


    context.done();
};

我错过了什么?请帮忙,谢谢。

它没有包含在您的答案中,但问题很可能在您的 functions.json 文件中。默认情况下,IoTHub 的绑定一次只能处理一条消息。这意味着您的 IoTHubMessages 不是数组,而是单个对象。您需要将基数从 one 更改为 many.

要更改此设置,请编辑您的 functions.json 文件以包含基数 属性。

{
  "type": "eventHubTrigger",
  "name": "eventHubMessages",
  "direction": "in",
  "eventHubName": "MyEventHub",
  "cardinality": "many",
  "connection": "myEventHubReadConnectionAppSetting"
}

如果您在门户中创建此函数,则可以在函数的 Integrate 部分更改绑定的基数: