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

如何将MongoDB查询结果导出到数组?自定义函数无法返回数据求助

问题分析与解决

你的代码问题出在异步执行顺序和**错误使用await**上:

  1. List.find()是异步操作,它的回调会在数据库查询完成后才执行,但你在回调外部直接执行console.log(listeler)和return listeler,此时回调还未执行,数组自然是空的。
  2. await加在foundLists.forEach()上完全无效——forEach只是同步遍历数组,不会返回Promise,await对它起不到任何等待作用。

正确写法(推荐用async/await)

直接利用Mongoose的Promise支持,把函数改成异步函数:

async function findListNames() {
  try {
    // 等待数据库查询完成,拿到结果
    const foundLists = await List.find({});
    // 若仅需转存查询结果,直接返回foundLists即可
    // 若要提取特定字段(比如名称),用map:
    // const listeler = foundLists.map(item => item.name);
    const listeler = foundLists;
    console.log(listeler);
    return listeler;
  } catch (err) {
    console.error('数据库查询失败:', err);
    return [];
  }
}

调用注意事项

async函数返回的是Promise,使用时需加await或用.then()链式调用:

// 方式1:在另一个async函数里用await
async function getLists() {
  const lists = await findListNames();
  // 在这里处理lists数组
}

// 方式2:用.then()链式调用
findListNames().then(lists => {
  // 处理lists数组
}).catch(err => {
  // 处理错误
});

备选方案(回调风格)

如果习惯用回调,可以把结果通过回调传递出来:

function findListNames(callback) {
  List.find({}, function(err, foundLists) {
    if (err) {
      console.error('查询出错:', err);
      return callback(err, []);
    }
    const listeler = foundLists;
    console.log(listeler);
    callback(null, listeler);
  });
}

// 调用示例
findListNames((err, result) => {
  if (err) {
    // 处理错误
  } else {
    // 使用result数组
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:00:02