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

try代码块中调用异步函数返回undefined的问题修复咨询

修复异步函数返回undefined的问题

你的问题核心在于findDoc函数没有正确返回异步操作的结果——它内部用了回调函数,但整个函数本身没有返回一个Promise,导致await无法等待异步查询完成,直接拿到了undefined。

解决方案:让findDoc返回Promise

因为await只能作用于Promise(或async函数),我们可以直接利用Mongoose的exec()方法本身就返回Promise的特性,改造findDoc:

function findDoc(rowObj) {
  // 直接返回exec()生成的Promise,错误会被主try-catch捕获
  return Database.findOne({ 'name': rowObj.name }, '_id, foreign_id').exec();
}

如果你更喜欢用async/await的写法让代码更直观,也可以改成这样:

async function findDoc(rowObj) {
  try {
    const docs = await Database.findOne({ 'name': rowObj.name }, '_id, foreign_id').exec();
    return docs;
  } catch (err) {
    // 抛出错误,让外层的try-catch处理
    throw err;
  }
}

为什么原来的代码会返回undefined?

原来的findDoc函数没有任何返回语句,所以默认返回undefined。而你在回调里写的return docs,只是回调函数自己的返回值,根本不会传递到外层的findDoc函数中。当你用await去等待一个不是Promise的值时,JS会把它包装成一个已解决的Promise,结果就是undefined。

修改后,findDoc返回了查询操作的Promise,await会等待这个Promise完成,拿到正确的查询结果,同时如果查询出错,错误会被外层的try-catch捕获。

验证效果

修改后运行代码,输出会变成:

before
CORRECT OBJECT
after

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 08:47:38