Await导致AWS Lambda函数超时问题排查求助
Lambda异步代码超时的原因及解决方法
核心问题出在你创建的Promise没有调用resolve方法,导致它一直处于pending状态,await会无限等待,直到Lambda触发超时。
看你写的这段代码:
const test = new Promise(() => setTimeout(() => void 1000));
Promise的executor函数(括号内的匿名函数)默认接收resolve和reject两个参数,你完全没用到resolve。setTimeout执行后没有任何逻辑结束这个Promise,所以它永远不会进入完成状态,await test就会一直卡住,后面的console.log("test")自然永远无法执行,最终Lambda达到10秒超时时间后报错。
修正方法很简单,在setTimeout回调里调用resolve即可:
export const handler: Handler = async (event) => { console.log("stops after this"); // 通过调用resolve结束Promise const test = new Promise(resolve => setTimeout(resolve, 1000)); await test; // 现在会正常执行 console.log("test"); }
如果是其他异步操作(比如MongoDB查询、第三方API请求)出现同样的超时问题,也要检查对应的Promise是否正确调用了resolve/reject,或者是否存在未处理的错误导致Promise一直处于pending状态。你的CDK配置没有问题,超时时间设置为10秒是合理的,问题完全出在Lambda代码的Promise逻辑上。
内容的提问来源于stack exchange,提问作者Ethan
相关产品推荐
相关产品推荐

