为什么我的 await lambda.invoke 函数多次调用 lambda?

Wro*_*ski 2 javascript amazon-web-services promise async-await aws-lambda

目前

我有一个lambdaX调用另一个lambdaY

拉姆达 X:

"use strict";

const AWS = require('aws-sdk');
AWS.config.region = 'ap-southeast-2';
var lambda = new AWS.Lambda();

exports.handler = async (event) => {

  //the final return
  var dataToSave = []

  //data to be added to array
  let returnLoad;

  var params = {
    FunctionName: 'lambdaY', // the lambda function we are going to invoke
    InvocationType: 'RequestResponse',
    LogType: 'Tail', //Set to Tail to include the execution log in the response.
  };

  try {
    await lambda.invoke(params, function(err, data) {
      if (err) {
        console.log("Error");
        console.log(err, err.stack);
      } else {
        console.log("Success");
        console.log(data);
        returnLoad = data.Payload;
      }
    }).promise();

    dataToSave.push(returnLoad);

  } catch (err) {
      console.log('some error occurred...');
  }

  const response = {
      statusCode: 200,
      body: JSON.stringify(dataToSave)
  };
  return response;
}
Run Code Online (Sandbox Code Playgroud)

拉姆达 Y:

exports.handler = async (event) => {
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};
Run Code Online (Sandbox Code Playgroud)

问题

出于某种原因,每当我调用lambdaX时,lambdaY 都会调用 2+ 次。请注意,lambdaX会返回正确的响应,但我想避免多次不必要地调用lambdaY

我需要在我的代码中更改什么?(或 lambda 配置)

日志:

注意:2 个 lambdaY 日志同时被调用。

在此处输入图片说明

注意:LambdaX 结果正常且符合预期。没有重复的日志。

在此处输入图片说明

jar*_*mod 8

您的代码滥用了 AWS 开发工具包。具体来说,它使用两种回调和承诺功能同时。它应该使用其中之一,但不能同时使用两者。

我会将它更改为仅使用承诺(并且显然为此添加了一些错误处理):

const data = await lambda.invoke(params).promise();
const returnLoad = data.Payload;
Run Code Online (Sandbox Code Playgroud)