下面的代码可以工作,但我只想使用async/await,所以我的问题是:我如何才能转向

cat.save().then(() => console.log('Saved in db'));

变成用await来代替?

我有mongoose.connection.once()的原因是只有在连接MongoDB时才发送命令.如果这也能用await,那就太好了=)

import mongoose from 'mongoose';
import { connectDb } from './modules/connectDb';
const { Schema } = mongoose;
const catSchema = new Schema({ name: String });
    
(async () => {
  connectDb('testDB');

  mongoose.connection.once('open', () => {
    console.log('MongoDB is connected');

    mongoose.connection.db.listCollections().toArray(function (err, names) {
      console.log(names);
    });

    const catModel = mongoose.model('testColl', catSchema);

    const cat = new catModel({ name: 'Zildjian' });
    cat.save().then(() => console.log('Saved in db'));
  });
})();

connectDb.ts

import mongoose from 'mongoose';
import { strict as assert } from 'assert';
import { readToml } from './readToml';

const db = readToml('./config/database.toml');

export function connectDb(
  database: string = db.database,
  uri: string = db.uri,
  username: string = db.username,
  password: string = db.password,
) {
  assert(typeof uri === 'string');
  assert(typeof database === 'string');
  assert(typeof username === 'string');
  assert(typeof password === 'string');

  const URI = `mongodb+srv://${username}:${password}@${uri}/${database}?retryWrites=true&w=majority`;

  try {
    mongoose.connect(URI);
  } catch (err) {
    console.error(err);
  }
}

推荐答案

首先,你需要connectDB个异步,然后Gitgo 掉mongoose.connection.once(),否则你需要你所有的Mongoose代码都在里面.

main().catch((err) => console.log(err));

async function main() {
  await connectDb('testDB');

  const catSchema = new mongoose.Schema({ name: String });
  const catDocument = mongoose.model('testColl', catSchema);

  const catObj = new catDocument({ name: 'Zildjian' });
  await catObj.save();
}

connectDB

import mongoose from 'mongoose';
import { strict as assert } from 'assert';
import { readToml } from './readToml';

const db = readToml('./config/database.toml');

export async function connectDb(
  database: string = db.database,
  uri: string = db.uri,
  username: string = db.username,
  password: string = db.password,
) {
  assert(typeof uri === 'string');
  assert(typeof database === 'string');
  assert(typeof username === 'string');
  assert(typeof password === 'string');

  const URI = `mongodb+srv://${username}:${password}@${uri}/${database}?retryWrites=true&w=majority`;

  const options = {
    bufferCommands: false,
    autoCreate: false,
  };

  try {
    await mongoose.connect(URI, options);
  } catch (err: any) {
    throw err.message;
  }
}

Javascript相关问答推荐

React存档iframe点击行为

Google Apps脚本中的discord邀请API响应的日期解析问题

使用JavaScript重新排序行

如何禁用附加图标点击的v—自动完成事件

如何粗体匹配的字母时输入搜索框使用javascript?

在JS中拖放:检测文件

无法使用单击按钮时的useState将数据从一个页面传递到另一个页面

在我的index.html页面上找不到我的Java脚本条形图

当用户点击保存按钮时,如何实现任务的更改?

为什么这个.add.group({})在教程中运行得很好,但在我的游戏中就不行了?

如何在JAVASCRIPT中合并两组对象并返回一些键

无法读取未定义的属性(正在读取合并)-react RTK

不同表的条件API端点Reaction-redux

在渲染turbo流之后滚动到元素

在JavaScript中将Base64转换为JSON

计算对象数组中属性的滚动增量

如何从Reaction-Redux中来自API调用的数据中筛选值

将匿名函数附加到链接的onClick属性

验证Java脚本函数中的两个变量

检测带有委托的元素内部的点击,以及元素何时按其类名被选中