I’m working on a personal project and am trying to understand the process logic that keeps my Node JS process from terminating after calling populateTransactions().
I think its because I need to close the DB (I’m not entirely clear on why), but when I do, the process terminates but the save() function of the model doesn’t complete and the DB isn’t written correctly.
When I let the script hang, eventually, it populates the DB correctly, but doesn’t terminate.
console.log("This script populates the Transaction collection so that we have some sample data for Issue #31: Uninspected Transactions Component");
let Transaction = require('./models/transaction');
let User = require('./models/user');
let mongoose = require('mongoose');
// let mongoDB = 'mongodb+srv://<username>:<password>@cluster0.dsqmg.mongodb.net/<collection-name>?retryWrites=true&w=majority';
mongoose.connect(mongoDB, {useNewUrlParser: true, useUnifiedTopology: true});
let db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
async function createTransaction(inspected, recurring, amount, note, startDateString, postDateString) {
let userQuery = await User.find({});
userQuery = userQuery[0];
let startDate = new Date(startDateString);
let postDate = new Date(postDateString);
let transaction = new Transaction({
user: userQuery._id,
inspected: inspected,
recurring: recurring,
amount: amount,
note: note,
startDate: startDate,
postDate: postDate
});
await transaction.save((err) => {
if(err){
console.log(err);
}
});
};
async function populateTransactions(){
await createTransaction(count,false, false, 563, "Numero Uno", "2012-12-05", "2012-12-06");
};
populateTransactions();
Advertisement
Answer
So I figured out that the issue was originating from
await transaction.save((err) => {
if(err){
console.log(err);
}
});
not following the await behavior. It turned out that the save() function doesn’t return a promise if you pass a callback as a parameter, so I refactored the code so that it didn’t use a callback and it worked as normal.