У меня есть лямбда, которая запускает функцию шага. Я попытался обновить его с node.js 10 до nod.je 12, и теперь он запускает две функции шага (в течение двух-трех мс). Выглядит, как он срабатывает дважды, потому что здесь отсутствует концептуальный эффект asyn c. Кто-нибудь может мне это объяснить, пожалуйста?
Старый код (работает)
'use strict';
var AWS = require('aws-sdk');
const s3 = new AWS.S3 ();
exports.handler = (event, context, callback) => {
event.SourceBucket = "bucket-A";
event.DestBucket = "bucket-B";
event.uriBase = decodeURIComponent(event.Records[0].s3.object.key);
event.uriBase = event.uriBase.substr(0,event.uriBase.lastIndexOf("/"));
event.uriBaseDel = event.uriBase + "/images";
event.Move = false;
//Get all img keys
const params = {
Bucket: event.SourceBucket,
Prefix: event.uriBase + "/images"
};
s3.listObjectsV2(params, function(err, data){
if(err){console.log(err)}else{
var result = data;
event.Keys = result.Contents.map(function(element){return(element.Key);});
// Start Step Function with Params
const stepfunctions = new AWS.StepFunctions();
const paramsb = {
stateMachineArn: 'my step function arn',
input: JSON.stringify(event),
};
stepfunctions.startExecution(paramsb, function(err, data) {
if (err) {callback(err, data);} // an error occurred
else {callback(null, data);} // successful response
});
}
});
};
Новый код (выполняет двойную функцию Step)
'use strict';
var AWS = require('aws-sdk');
const s3 = new AWS.S3 ();
exports.handler = async (event) => {
event.SourceBucket = "bucket-A";
event.DestBucket = "bucket-B";
event.uriBase = decodeURIComponent(event.Records[0].s3.object.key);
event.uriBase = event.uriBase.substr(0,event.uriBase.lastIndexOf("/"));
event.uriBaseDel = event.uriBase + "/images";
event.Move = false;
//Get all img keys
const params = {
Bucket: event.SourceBucket,
Prefix: event.uriBase + "/images"
};
var result = await s3.listObjectsV2(params).promise();
event.Keys = result.Contents.map(function(element){return(element.Key);});
const stepfunctions = new AWS.StepFunctions();
const params2 = {
stateMachineArn: 'my step function arn',
input: JSON.stringify(event)
};
stepfunctions.startExecution(params2, function(err, data) {
if (err) {return(err, data);} // an error occurred
else {return(null, data);} // successful response
});
};