Azure 示例代码上的孪生查询是多余的 query.nextAsTwin(onResults)?

Twin query on Azure sample code is redundant query.nextAsTwin(onResults)?

我正在尝试使用以下示例代码从 Azure IoT 中心查询孪生信息。但我不确定为什么我们需要 query.nextAsTwin(onResults) 2 次。如果我删除 2sd 有什么影响吗?

参考:https://github.com/Azure/azure-iot-sdk-node/blob/main/service/samples/javascript/twin_query.js

var Registry = require('azure-iothub').Registry;

var connectionString = process.env.IOTHUB_CONNECTION_STRING;
var registry = Registry.fromConnectionString(connectionString);

var query = registry.createQuery('SELECT * FROM devices', 100);
var onResults = function(err, results) {
  if (err) {
    console.error('Failed to fetch the results: ' + err.message);
  } else {
    // Do something with the results
    results.forEach(function(twin) {
      console.log(twin.deviceId);
    });

    if (query.hasMoreResults) {
        query.nextAsTwin(onResults);
    }
  }
};

query.nextAsTwin(onResults);

根据IoT Hub query language for device and module twins, jobs, and message routing

The query object is instantiated with a page size (up to 100). Then multiple pages are retrieved by calling the nextAsTwin method multiple times.

如果您的页面大小超过 100,那么您可以调用 nextAsTwin 两次,否则您可以删除冗余。

可以参考其他例子:Get started with device twins (Node.js)

在您发布的代码中,onResults 是一个函数,用于打印查询结果中每个双胞胎 return 的设备 ID。如果查询指示更多结果,它会再次调用 query.nextAsTwin(onResults);。这不是多余的;它是一个递归函数,会不断调用自身,直到查询中没有更多结果。

在您的示例中,查询将一次 return 100 个结果,如代码中 pageSize 参数中指定的那样:

registry.createQuery('SELECT * FROM devices', 100);

因此,当结果超过 100 个时,将需要多次调用 nextAsTwin