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

JS中如何用async/await等待Mongoose insertMany完成后执行find

Mongoose 按序执行插入、查询的async/await实现

Mongoose 所有原生方法在不传入回调函数时,都会返回Promise对象,因此可以直接用async/await做异步流程控制,严格保证insertMany执行完成后再触发find操作。

实现注意事项

  • 所有await语句需要放在async标记的函数内,Node.js 14.8+版本的ES Module环境支持直接使用顶层await,无需额外包裹函数
  • 用try/catch块统一捕获数据库操作抛出的异常,替代原有回调中的错误判断逻辑
  • 原有回调写法的问题在于两个异步操作会并行发起,find不会等待插入完成,很容易出现查不到刚写入数据的情况

代码实现

通用兼容写法(适配所有Node.js版本)

async function handleFruitData() {
  try {
    // 等待批量插入操作完成
    await Fruit.insertMany([kivi, orange, mango]);
    console.log("operation successful: saved all fruits to DB");

    // 插入完成后才会执行查询逻辑
    const fruitList = await Fruit.find({ name: 'kivi' });
    console.log(fruitList);
  } catch (err) {
    // 捕获插入、查询全流程的错误
    console.log(err);
  }
}

// 执行操作
handleFruitData();

顶层await写法(仅支持高版本Node.js ES Module环境)

try {
  await Fruit.insertMany([kivi, orange, mango]);
  console.log("operation successful: saved all fruits to DB");
  const kiviList = await Fruit.find({ name: 'kivi' });
  console.log(kiviList);
} catch (err) {
  console.log(err);
}

注:原回调代码存在两处笔误:一是insertMany回调形参写为e,错误打印时用了未定义的err变量;二是提示文案中succesful拼写错误,上述示例已做修正。

内容的提问来源于stack exchange,提问作者Nishant Vikram Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:15:33