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

问题描述 投票:1回答:1

当前

我有一个调用另一个lambdaYlambdaX

Lambda 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;
}

Lambda Y:

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

问题

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

我需要在代码中进行哪些更改? (或lambda配置)

日志:

注:完全同时调用2个lambdaY日志。

enter image description here

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

enter image description here

javascript amazon-web-services promise aws-lambda async-await
1个回答
4
投票

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

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

const data = await lambda.invoke(params).promise();
const returnLoad = data.Payload;
© www.soinside.com 2019 - 2024. All rights reserved.