Ad
Await Is Not Waiting
I'm using node js with mongodb. I'm trying to insert an element in the Collection "users" created previously. Afterwards, I delete the Collection and insert two new "users" and print them.
However, the code isn't being executed in the order I was expecting.
I've tried a few different things. For example, removing dropCollection makes it execute in the desired order but I need to use this function for my code. I also tried not using await and obviously, the same result appears.
var MongoClient = require("mongodb").MongoClient;
var url = "mongodb://localhost:27017/mydb";
MongoClient.connect(url, {useNewUrlParser:true}, async function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
var myobj = { email: "[email protected]", name: "example"};
await dbo.collection("users").insertOne(myobj, function(err, res) {
if (err) throw err;
console.log("1 user inserted");
});
await dbo.dropCollection("users", function(err, delOK) {
if (err) throw err;
if (delOK) console.log("Collection deleted");
});
var myobj = { email: "[email protected]", name: "example"};
await dbo.collection("users").insertOne(myobj, function(err, res) {
if (err) throw err;
console.log("1 user inserted");
});
var myobj = { email: "[email protected]", name: "example2"};
await dbo.collection("users").insertOne(myobj, function(err, res) {
if (err) throw err;
console.log("1 user inserted");
});
dbo.collection("users").find({}).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
})
The output I am expecting:
$ npm start
1 user inserted
Collection deleted
1 user inserted
1 user inserted
[{ _id: 1234,
email: '[email protected]',
name: 'example' },
{ _id: 5678,
email: '[email protected]',
name: 'example2' }]
But the output I get is:
$ npm start
1 user inserted
1 user inserted
Collection deleted
[]
1 user inserted
Ad
Answer
You can await
only on Promise
object. Remove all your callback functions within async
context.
const MongoClient = require("mongodb").MongoClient;
const url = "mongodb://localhost:27017/mydb";
MongoClient.connect(url, {useNewUrlParser:true}, async function(err, db) {
if (err) throw err;
const dbo = db.db("mydb");
var myobj = { email: "[email protected]", name: "example"};
await dbo.collection("users").insertOne(myobj);
console.log("1 user inserted");
const delOK = await dbo.dropCollection("users");
if (delOK) console.log("Collection deleted");
var myobj = { email: "[email protected]", name: "example"};
await dbo.collection("users").insertOne(myobj);
console.log("1 user inserted");
var myobj = { email: "[email protected]", name: "example2"};
await dbo.collection("users").insertOne(myobj);
console.log("1 user inserted");
const result = await dbo.collection("users").find({}).toArray();
console.log(result);
db.close();
})
Ad
source: stackoverflow.com
Related Questions
- → Maximum call stack exceeded when instantiating class inside of a module
- → Browserify api: how to pass advanced option to script
- → Node.js Passing object from server.js to external modules?
- → gulp-rename makes copies, but does not replace
- → requiring RX.js in node.js
- → Remove an ObjectId from an array of objectId
- → Can not connect to Redis
- → React: How to publish page on server using React-starter-kit
- → Express - better pattern for passing data between middleware functions
- → Can't get plotly + node.js to stream data coming through POST requests
- → IsGenerator implementation
- → Async/Await not waiting
- → (Socket.io on nodejs) Updating div with mysql data stops without showing error
Ad