首页 > 解决方案 > 从 AWS Lambda 获取 AWS IoT 影子状态

问题描述

我正在尝试从 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);        
});

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

标签: node.jsamazon-web-servicesaws-lambdaiotaws-iot

解决方案


由于您使用的是异步处理程序,我认为问题在于您的函数在处理程序的主体有机会运行之前完成。

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

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;  

推荐阅读