Без сервера: Запуск і забудьте методом виклику не працює, як очікувалося


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, чому виклик не працює?
Surendhar E

Відповіді:


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
 }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.