【问题标题】:Get AWS IoT shadow state from AWS Lambda从 AWS Lambda 获取 AWS IoT 影子状态
【发布时间】:2020-09-07 20:52:28
【问题描述】:

我正在尝试从 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.js amazon-web-services aws-lambda iot aws-iot


    【解决方案1】:

    由于您使用的是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;  
    

    【讨论】:

    • 谢谢马尔辛。这真的很有帮助。 AWS 文档的方式无处不在,我相信有些人可能错过了文档、与在这种情况下使用 Promise 相关的注意事项,或者在进行冗长的表扫描等情况下。
    猜你喜欢
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 2017-07-15
    相关资源
    最近更新 更多