Я использую приведенный ниже код в качестве лямбда-функции, выполняемой при вызове API.
У меня возникает проблема, когда response
и callback
находятся в своей текущей позиции в массиве scans
возвращает []
, даже если сканируемый объект заполняется и помещается в массив.Однако, когда response
и callback
помещаются в секцию ***PLACEHOLDER***
, массив возвращает заполненный объектом сканирования.
Я понимаю, что это как-то связано с асинхронной природой кода, как я выгляделна многие похожие вопросы по стеку, но наряду с кодом AWS-SDK я не могу понять, что делать, чтобы исправить это.
const AWS = require('aws-sdk');
const ddb = new AWS.DynamoDB.DocumentClient();
const iot = new AWS.Iot;
exports.handler = (event, context, callback) => {
iot.listThings(null, function(err, data) {
var scans = [];
if (err) {
callback(err, null);
}
else {
for (var i = 0; i < data.things.length; i++) {
var device = data.things[i].attributes;
const params = {
// redacted
};
ddb.query(params, function(err, data) {
if (err) {
callback(err, null);
}
else {
var scan = {
"area": device.area,
"count": data["Count"]
};
scans.push(scan);
// ***PLACEHOLDER***
}
});
}
}
var response = {
"statusCode": 200,
"headers": {},
"body": JSON.stringify(scans),
"isBase64Encoded": false
};
callback(null, response);
});
};