The below code works, but I would like to only use async/await
, so my question is ´: How can I turn
cat.save().then(() => console.log('Saved in db'));
into using await
instead?
The reason I have mongoose.connection.once()
is to only send commands when MongoDB is connected. if this could use await
as well, then it would be really great =)
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);
}
}
3
Answers
In order to use
await
you have to provide a promise to await for.cat.save()
returns a promise, so this should work. Nevertheless you can also only useawait
in async function, so you should also declare the callback function for the open event as async:Try below code and make sure the function contains await keyword should always async function (async keyword should be used before function name). But in your case callback function already defined as async function.
Just change the saving part alone to below, you are good to go.
First you need to make
connectDB
async and then git rid ofmongoose.connection.once()
as you otherwise would need all your Mongoose code to be in there.connectDB