无服务器:通过调用方法触发并忘记无法正常工作

时间:2019-10-09 06:30:03

标签: javascript aws-lambda serverless aws-serverless aws-lambda-edge

我有一个无服务器 lambda 函数,在该函数中,我想触发(调用)一种方法而忘记它

我是用这种方式做的

   // 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,但不应设置lambda {{ 1}}的意思是我们希望这是一劳永逸,而不在乎回调响应吗?

我在这里想念东西吗?

我们非常感谢您的帮助。

1 个答案:

答案 0 :(得分: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
 }