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