I'm trying to save a document in mongodb collection and want to wait for it finish before the JavaScript executes next instruction but the await is not waiting
const properties = ["name", "description", "type", "permission", "color"];
const addEvent = async (eventInfo, api_call = true) => {
let response = { success: true };
for (let prop of properties) {
if (prop !== "permission" && !eventInfo.hasOwnProperty(prop)) {
response.success = false;
response.message = prop + " field is not given.";
break;
}
}
if (response.success) {
let event = new Event(eventInfo);
await event.save((err) => {
if (err) {
response.success = false;
response.message = err.message;
console.log(response);
} else {
response.success = true;
response.message = "Event Added.";
}
});
console.log(response);
}
if (api_call) {
return new Promise((resolve, reject) => {
response.success ? resolve(response) : reject(response);
});
}
};
It's not ideal to use a callback with async-await. I'd restructure the code as below:
let event = new Event(eventInfo);
try {
await event.save();
response.success = true;
response.message = "Event Added.";
} catch (err) {
response.success = false;
response.message = err.message;
}
console.log(response);
You should either use callbacks for promises or use async-await but not both.