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

AWS Lambda异步函数中调用YouTube上传API时回调未执行的解决方法

解决AWS Lambda异步环境下Google YouTube API回调未触发的问题

核心方案:用Promise封装回调逻辑

虽然YouTube API官方方法仅支持回调形式,但可以手动将其封装为Promise,适配Lambda的异步执行模型——Lambda异步处理器会等待Promise完成,确保回调逻辑被正常执行。

封装后的完整代码示例

// 把YouTube API的回调方法封装成Promise
function uploadVideo(service, uploadParams) {
  return new Promise((resolve, reject) => {
    service.videos.insert(uploadParams, (err, response) => {
      if (err) {
        console.log('The API returned an error: ' + err);
        return reject(err);
      }
      console.log(response.data);
      resolve(response.data);
    });
  });
}

// Lambda异步处理器中使用封装后的方法
exports.handler = async (event) => {
  // 这里省略auth、stream、title、description等变量的初始化逻辑
  const uploadParams = {
    auth: auth,
    part: 'snippet,status',
    requestBody: {
      snippet: {
        title,
        description,
        tags,
        categoryId: categoryIds.ScienceTechnology,
        defaultLanguage: 'en',
        defaultAudioLanguage: 'en'
      },
      status: {
        privacyStatus: "private"
      },
    },
    media: {
      body: stream,
    },
  };

  try {
    const uploadResult = await uploadVideo(service, uploadParams);
    return {
      statusCode: 200,
      body: JSON.stringify(uploadResult)
    };
  } catch (err) {
    return {
      statusCode: 500,
      body: JSON.stringify({ error: err.message })
    };
  }
};

关键说明

  • Lambda异步handler会等待await后的Promise执行完毕,避免原回调逻辑因Lambda提前结束而被丢弃。
  • 封装Promise时需确保正确调用resolve和reject,让异步流程能捕获成功结果和错误信息。
  • 无需修改Lambda的事件处理器结构,仅需对回调式API调用做一层包装即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:47:08