Azure SDK IoT Edge node invokeDeviceMethod не работает асинхронно - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь вернуть результат для прямого вызова метода в асинхронном режиме c.

Я пытался:

var client = Client.fromConnectionString(process.env.AZ_IOT_CONNECTION_STRING);
var methodParams = {
  methodName: "method",
  payload: 10, // Number of seconds.
  responseTimeoutInSeconds: 60
};

// Call the direct method on your device using the defined parameters.
client.invokeDeviceMethod(
  req.params.deviceId,
  methodParams,
  (err, result) => {
    if (err) {
      console.error(err);
    } else {
      console.log("success");
    }
  }
);

На устройстве:

const method = async (request, response) => {
  const longProcess = () => {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve();
      }, 5000);
    });
  };

  try {
    await longProcess();
    response.send(200, `success`);
  } catch (error) {
    response.send(500, `Error: ${error}:`);
  }
};


client.onDeviceMethod("method", method);

Ожидается : возвращает успех через 5 секунд

Фактически : возвращает «BadRequest» «errorCode: 400027», но метод выполняется правильно.

...