繁体   English   中英

如果在不同的上下文中调用回调,则简单的AWS Lambda响应为null

[英]Simple AWS Lambda response is null if callback is called in different context

在运行将AWS Lambda与NodeJS一起编写的某些代码时,我遇到了问题。 我花了一些时间来缩小问题范围,但最终我注意到,如果我从不同于处理程序函数上下文的上下文中调用回调函数,则响应值为null。

这是我用来测试的简单函数

exports.handler = async (event, context, callback) => {
  callback (null,{
        statusCode: 201,
        headers: {
          "Content-Type": "text/html"
        },
        body: {}
  });
}

如果我使用此代码运行测试事件(测试脚本为空JSON),则结果很简单:

Response:
{
  "statusCode": 201,
  "headers": {
    "Content-Type": "text/html"
  },
  "body": {}
}

但是,如果我仅强制在不同的上下文中调用回调函数,如下例所示:

exports.handler = async (event, context, callback) => {    
    setTimeout(function() {
        callback (null,{   // <-- callback is now called in timer context
            statusCode: 201,
            headers: {
              "Content-Type": "text/html"
            },
            body: {}
      })}, 5000);
}

然后,运行完全相同的测试事件(空JSON)将导致响应为空:

Response:
null

现在在我看来,这似乎是一个非常基本的功能,我只是假设我在这里遗漏了一些东西。 谁能帮我查明我的错误? 或说明即使在不同的上下文中调用了回调,响应值如何也可以包含所需的值? 谢谢!

同步代码与工作结果 响应为空的异步代码 测试事件-空的JSON对象

更新#1使用promise再次测试了一次:

另一个有希望的测试

您的代码将在调用回调之前立即返回。 这就是为什么它在第一个示例中起作用的原因。

尝试将await添加到Promise示例的前面,以便该节点在继续之前完成工作。

const value = await delay(5000)
callback(null, value)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM