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

Node.js 14.x版Lambda函数无后续日志输出且返回null是什么原因?

问题根因

你的代码核心问题是异步操作执行时序不匹配,具体问题点如下:

  • lambda.getProvisionedConcurrencyConfig是异步IO方法,你传入的回调函数会在AWS接口请求完成后才触发,但是你的async handler没有等待这个异步操作完成,就直接执行了return response
  • 执行return的时候回调还未运行,response变量没有被赋值,所以函数返回null;同时Lambda会在return后立刻冻结执行上下文,回调里的所有日志打印逻辑都不会被执行,所以你只能看到console.log(event)的输出
  • 你混用了async handler模式和回调模式:Lambda的async handler默认会等待返回的Promise resolve,你既没有用await等待异步操作,也没有通过传入的callback参数返回结果,直接同步返回了未赋值的变量
修复方案

方案1(推荐):适配async handler,改用Promise + await写法

AWS SDK v2的所有方法都支持调用.promise()转为Promise对象,配合async/await语法符合现代Node.js写法,逻辑更清晰:

var AWS  = require("aws-sdk");
var lambda = new AWS.Lambda();

exports.handler = async function(event, context) {
    var params = {
        FunctionName: 'Myfunction', 
        Qualifier: 'v1' 
    };
    console.log(event);
    let response;
    try {
        const data = await lambda.getProvisionedConcurrencyConfig(params).promise();
        console.log('Success');
        console.log(data);
        response = {
            statusCode: 200,
            body: JSON.stringify(data),
        };
    } catch (err) {
        console.log('error occured');
        console.log(err, err.stack);
        response = {
            statusCode: 200,
            body: JSON.stringify(err),
        };
    }
    return response;
};

方案2:保留回调写法,移除async关键字通过callback返回结果

如果你要继续用回调模式,需要移除handler的async关键字,在回调内部调用传入的callback参数返回结果,Lambda会等待callback触发后才结束函数执行:

var AWS  = require("aws-sdk");
var lambda = new AWS.Lambda();

exports.handler = function(event, context, callback) {
    var params = {
        FunctionName: 'Myfunction', 
        Qualifier: 'v1' 
    };
    console.log(event);
    
    lambda.getProvisionedConcurrencyConfig(params, function(err, data) {
        console.log('entered call');
        let response;
        if (err){
            console.log('error occured');
            console.log(err, err.stack); 
            response = {
                statusCode: 200,
                body: JSON.stringify(err),
            };
        } 
        else{
            console.log('Success');
            response = {
                statusCode: 200,
                body: JSON.stringify(data),
            };
            console.log(data);          
        }
        callback(null, response);
    });
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 16:06:01