Serverless: Cháy và quên bằng phương thức gọi không hoạt động như mong đợi


9

Tôi có một hàm lambda Serverless , trong đó tôi muốn kích hoạt (gọi) một phương thức và quên nó đi

Tôi đang làm theo cách này

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

Tôi đã nhận thấy rằng cho đến khi và trừ khi tôi làm một Promise returntrong myFunction1, nó không kích hoạt myFunction2, nhưng không nên đặt lambda InvocationType = "Event"có nghĩa là chúng tôi muốn đây là lửa và quên đi và không quan tâm đến phản ứng gọi lại?

Am i thiếu cái gì ở đây?

Bất kỳ sự trợ giúp nào cũng được đánh giá cao.


Bạn đã kiểm tra nhật ký trong Cloudwatch xem tại sao việc gọi không thành công?
Surendhar E

Câu trả lời:


2

Bạn myFunction1nên là một hàm không đồng bộ, đó là lý do tại sao hàm trả về trước myFunction2có thể được gọi lambda.invoke(). Thay đổi mã thành như sau thì nó sẽ hoạt động:

 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
 }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.