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

SendGrid请求后.then内代码本地正常但Vercel生产环境无输出

Vercel生产环境中console.log不执行的原因分析

核心原因推测

1. Serverless函数执行上下文提前回收

Vercel的Serverless函数会在Promise resolve后快速终止执行上下文,即使.then()回调里的代码还没完成执行。你的代码中返回了sgMail.send(msg).then(...)的Promise,当邮件发送完成(Promise resolve),Vercel可能直接结束进程,导致console.log还没来得及被日志系统捕获就被终止了。

2. 异步回调的日志捕获时机差异

本地环境中Node.js会等待所有微任务执行完毕再退出,但Vercel的Serverless运行时为了优化资源利用率,可能不会等待.then()这类微任务回调完成,就直接回收函数实例,进而导致日志丢失。

验证与解决方法

方法1:改用async/await确保同步执行

将代码改为async/await写法,确保console.log在函数执行上下文内完成:

async function sendGridMail(email: string, unsubscribeLink: string, msg: string) {
  sgMail.setApiKey(process.env.SENDGRID_API_KEY_TEST!)
  try {
    await sgMail.send(msg)
    console.log('email sent')
  } catch (error) {
    console.log(error.message)
  }
}

这种写法会等待邮件发送完成后再执行console.log,函数执行完毕后才会结束上下文,日志能被正常捕获。

方法2:检查Vercel日志过滤设置

登录Vercel控制台,查看对应函数的日志面板,确认是否开启了日志级别过滤(比如是否隐藏了info级别的日志)。默认情况下console.log属于info级别,若被过滤则无法显示。

方法3:测试基础日志输出

在函数开头添加console.log('function started'),验证Vercel是否能捕获基础日志。如果这条日志能显示,说明问题确实出在异步回调的时机上;如果也不显示,可能是函数的日志配置存在异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:03:13