Sans serveur: la méthode de déclenchement et d'oubli par invocation ne fonctionne pas comme prévu

9

J'ai une fonction lambda sans serveur , dans laquelle je veux lancer (invoquer) une méthode et l'oublier

Je le fais de cette façon

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

J'ai remarqué que jusqu'à ce que et à moins que je fasse un Promise returnin myFunction1, cela ne se déclenche pas myFunction2, mais ne devrait pas définir le lambda InvocationType = "Event"signifie que nous voulons que ce soit le feu et oublier et ne pas se soucier de la réponse de rappel?

Est-ce que j'ai râté quelque chose?

Toute aide est grandement appréciée.

Manzur Khan
la source
Avez-vous vérifié les journaux dans Cloudwatch pour savoir pourquoi l'invocation échoue?
Surendhar E

Réponses:

2

Votre fonction myFunction1devrait être une fonction asynchrone, c'est pourquoi la fonction retournée avant myFunction2pourrait être invoquée dans lambda.invoke(). Modifiez le code comme suit, cela devrait fonctionner:

 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
la source