Bez serwera: Uruchom i zapomnij metodą invoke nie działa zgodnie z oczekiwaniami

9

Mam funkcję Serverda lambda , w której chcę odpalić (wywołać) metodę i zapomnieć o niej

Robię to w ten sposób

   // 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
  }

Zauważyłem, że do czasu, gdy robię Promise returnin myFunction1, to nie powoduje myFunction2, ale nie powinien ustawić lambda InvocationType = "Event"oznacza, że chcemy to być ogień i zapomnieć i nie dbają o odpowiedź zwrotną?

Czy coś mi umyka?

Każda pomoc jest bardzo ceniona.

Manzur Khan
źródło
Czy sprawdziłeś dzienniki w Cloudwatch, dlaczego wywołanie się nie powiodło?
Surendhar E,

Odpowiedzi:

2

Twój myFunction1powinna być funkcja asynchroniczny dlatego funkcja zwraca zanim myFunction2mogłyby być powoływane w lambda.invoke(). Zmień kod na następujący, a następnie powinien działać:

 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
 }
Surendhar E.
źródło