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

Next.js中await reverso-api的Promise无法正常结束执行怎么办

问题根因

reverso-api的getContext方法同时兼容回调、Promise两种调用范式,当你传入第四个回调参数时,方法返回的Promise永远不会触发resolve或reject,此时外层await会一直处于挂起状态,代码自然不会继续向下执行。你现在的写法同时混用了回调和await两种模式,刚好触发了这个逻辑问题。

修复方案

两种写法二选一即可,绝对不要同时传回调函数又用await等待返回Promise:

  • 方案1:纯async/await写法(推荐,适配Next.js API路由的异步写法规范)
    去掉第四个回调入参,直接用await接收接口返回值即可,修复后代码如下:
type Data = {
   responseWord : string
}

export default async function handler( req: NextApiRequest, res: NextApiResponse<Data>) {
   const Reverso = require('reverso-api');
   const reverso = new Reverso();

   console.log("1");
   try {
       const response = await reverso.getContext('Dog', 'English', 'German');
       const resultText = response?.text;
       console.log(resultText);
       console.log("2");
       res.status(200).json({ responseWord: `${resultText}` });
   } catch (err) {
       // 禁止留空catch逻辑,出错时返回明确错误响应,避免请求超时挂起
       res.status(500).json({ responseWord: "翻译请求失败" });
   }
}
  • 方案2:纯回调写法
    如果要使用回调模式,就去掉await关键字,把响应返回逻辑放到回调函数内部:
type Data = {
   responseWord : string
}

export default function handler( req: NextApiRequest, res: NextApiResponse<Data>) {
   const Reverso = require('reverso-api');
   const reverso = new Reverso();

   console.log("1");
   reverso.getContext('Dog', 'English', 'German', (response: any) => {
       const resultText = response?.text;
       console.log(resultText);
       console.log("2");
       res.status(200).json({ responseWord: `${resultText}` });
   }).catch((err: any) => {
       res.status(500).json({ responseWord: "翻译请求失败" });
   });
}
额外优化点
  • 建议把reverso-api的导入语句放到文件顶部,不要每次接口请求都重新执行require初始化实例,减少性能开销。
  • 原代码中定义在handler外部的r变量存在并发问题,Serverless环境下多请求同时触发时会互相覆盖值,必须移到handler函数内部定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:48:27