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

AWS Lambda不等待Async/Await执行、未等API响应就提前终止如何解决?

问题根本原因

你当前使用的是async类型的Lambda Handler,但S3上传调用的是回调风格API,async函数不会等待异步回调执行完成,代码执行到s3.putObject(...)调用后就直接走完了try块主逻辑,Lambda检测到主流程执行完毕就会提前终止进程,不会等待回调内的上传结果处理逻辑执行。
你之前添加的context.callbackWaitsForEmptyEventLoop = false配置反而会加剧该问题:该配置的作用是告诉Lambda调用callback后立刻冻结进程,无需等待剩余异步任务执行完成,和你需要等待上传完成的需求完全相悖。

解决方案

将S3上传改为Promise调用搭配await等待执行完成即可,async类型Handler无需额外使用callback,直接返回结果或抛出错误即可。
修正后的完整代码如下:

exports.handler = async (event, context) => {
  try {
    console.log('FETCHING RECORDS FROM DATOCMS')
    const allItems = await client.items.all({}, { allPages: true })
    if (!fs.existsSync(backupDir)){
        // Create backup directory
        console.log('CRETING BACKUP DIRECTORY')
        fs.mkdirSync(backupDir, { recursive: true });
    }

    console.log('FILL JSON WITH RECORDS FETCHED FROM DATOCMS')
    fs.writeFileSync('backup/records.json', JSON.stringify(allItems, null, 2));

    console.log('ADDING BACKUP FOLDER TO ZIP')
    zip.addLocalFolder(backupDir);
    const zipFileContents = zip.toBuffer();
    
    const params = {
        Bucket: S3_BUCKET,
        Key: `backup_zip-${backupDate}`,
        Body: zipFileContents,
        ContentType: "application/zip",
        ContentDisposition: `attachment; filename="${fileName}-${backupDate}"`
    }

    console.log('UPLOADING ZIP TO S3', params)
    // 改为Promise形式调用,await等待上传完成
    await s3.putObject(params).promise()
    console.log('Uploaded correctly')
    fs.rmdirSync(backupDir, { recursive: true });
    return 'Success'
 } catch (err) {
    console.error('An error occurred', err)
    return 'Error..'
 }
}

修正点说明

  • 移除了不必要的callback参数,async类型Handler直接通过return返回执行结果
  • 将回调形式的S3上传改为.promise()调用搭配await,确保进程等待上传完成再继续执行后续逻辑
  • 删除了无效的setInterval和context.callbackWaitsForEmptyEventLoop = false配置
  • 异常捕获逻辑改为直接打印错误返回结果,避免重复抛错导致异常上报混乱

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:45:03