Serverless: Fire และลืมโดยวิธีการเรียกใช้ไม่ทำงานตามที่คาดไว้


9

ฉันมีฟังก์ชั่นแลมบ์ดาServerless ซึ่งฉันต้องการใช้วิธีเรียกใช้ (ลืม) และลืมมันไป

ฉันทำมันด้วยวิธีนี้

   // 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ควรจะเป็นฟังก์ชั่น async ที่ว่าทำไมกลับมาทำงานก่อนที่จะถูกเรียกใน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
 }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.