You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地测试NodeJS版AWS Lambda时回调未触发问题咨询

问题原因

  • 你定义的Lambda handler是async异步函数,Node.js运行时下的AWS Lambda针对async类型的handler会忽略传入的回调参数,而是以函数return的Promise resolve结果作为返回值,不会主动触发你传入的第三个回调函数,所以Response[2]对应的打印逻辑永远不会执行。
  • 你调用process.handler的时候没有等待异步函数执行完成,同步代码直接就执行到了>> END的打印,不会等待回调触发。
  • 你传入的回调函数参数顺序也不符合Lambda回调规范,Lambda回调的参数顺序是callback(error, successResponse),就算回调被触发,你定义的function(response,error)也会把错误值放到第一个参数,响应结果放到第二个参数,无法正常拿到返回值。

修复方案

方案1:保留async handler,去掉回调,用await接收返回值

修改simplerun.js代码如下:

let process = require('./simpletest.js');

// 把执行逻辑放在async函数里用await
(async () => {
  console.log(">> START");
  const response = await process.handler({}, {});
  console.log(">> Response[2]: " + JSON.stringify(response));
  console.log(">> END");
})();

方案2:把handler改成非async模式,使用回调返回结果

修改simpletest.js代码如下:

// 去掉async,使用第三个回调参数返回结果
exports.handler = (event, context, callback) => {
    console.log('>> Handler called');

    const response = {
        statusCode: 200,
        body: JSON.stringify('Handler Data')
    };

    console.log('>> Response[1]: ' + JSON.stringify(response));
    // 调用回调返回结果,第一个参数是错误位,传null表示成功
    callback(null, response);
};

两种方案任意选择一种都可以得到你预期的输出结果。


内容的提问来源于stack exchange,提问作者Scott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:51:03