代码之家  ›  专栏  ›  技术社区  ›  Manzur Khan

Serverless:Fire and forget by invoke方法未按预期工作

  •  4
  • Manzur Khan  · 技术社区  · 5 年前

    我有一个 无服务器 函数,在这个函数中,我想激发(调用)一个方法而忽略它

    我用这种方式来做

       // 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" 意思是说我们希望这样 不在乎回叫响应?

    我是不是少了点什么?

    我们非常感谢您的帮助。

    0 回复  |  直到 5 年前
        1
  •  2
  •   Surendhar E    5 年前

    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
     }