从 AWS Lambda 获取 AWS IoT 影子状态

Get AWS IoT shadow state from AWS Lambda

我正在尝试从 Lamda 函数内部获取 IoT 影子状态。到目前为止,这是我的 Lambda 函数中的内容:

var AWS = require('aws-sdk');

var iotdata = new AWS.IotData({
  endpoint: process.env.endpoint
});

exports.handler = async (event) => {
  const params = {
  thingName: 'MyThing',
};

iotdata.getThingShadow(params, function(err, data) {
  if (err) console.log(err, err.stack); 
  else     console.log('ok', data);        
});

但它从不记录数据。我错过了什么?

由于您使用的是 async handler 我认为问题在于您的函数在处理程序的主体有机会 运行.

之前完成

纠正此问题的一种方法是使用 Promise,如 AWS docs 所示。例如:

var AWS = require('aws-sdk');

var iotdata = new AWS.IotData({
  endpoint: process.env.endpoint
});

exports.handler = async (event) => {

    const promise = new Promise(function(resolve, reject) {

      const params = {
        thingName: 'MyThing',
      };

      iotdata.getThingShadow(params, function(err, data) {
        if (err){
           console.log(err, err.stack); 
           reject();
        }
        else {
           console.log(data);
           resolve();
        }        
      });
  })

  return promise;