Безсерверный: метод запуска и забывания при вызове не работает должным образом

9

У меня есть серверная лямбда- функция, в которой я хочу запустить (вызвать) метод и забыть о нем

Я делаю это таким образом

   // myFunction1
   const params = {
    FunctionName: "myLambdaPath-myFunction2", 
    InvocationType: "Event", 
    Payload: JSON.stringify(body), 
   };

   console.log('invoking lambda function2'); // Able to log this line
   lambda.invoke(params, function(err, data) {
      if (err) {
        console.error(err, err.stack);
      } else {
        console.log(data);
      }
    });


  // my function2 handler
  myFunction2 = (event) => {
   console.log('does not come here') // Not able to log this line
  }

Я заметил , что до тех пор, пока я не делать Promise returnпо прибытии myFunction1, он не срабатывает myFunction2, но не следует устанавливать лямбда InvocationType = "Event"означает , что мы хотим , чтобы это огонь и забыть , а не заботиться о реакции обратного вызова?

Я что-то здесь упускаю?

Любая помощь высоко ценится.

Манзур Хан
источник
Вы проверили журналы в Cloudwatch на предмет того, почему не удается выполнить вызов?
Сурендхар Э

Ответы:

2

Вы myFunction1должны быть асинхронной функцией, поэтому функция, которая возвращается до того, как myFunction2может быть вызвана lambda.invoke(). Измените код на следующий, тогда он должен работать:

 const params = {
    FunctionName: "myLambdaPath-myFunction2", 
    InvocationType: "Event", 
    Payload: JSON.stringify(body), 
 };

 console.log('invoking lambda function2'); // Able to log this line
 return await lambda.invoke(params, function(err, data) {
     if (err) {
       console.error(err, err.stack);
     } else {
       console.log(data);
     }
 }).promise();


 // my function2 handler
 myFunction2 = async (event) => {
   console.log('does not come here') // Not able to log this line
 }
Сурендхар Э
источник