How Mongoose is able to know that I've used await on invoking their function or not? [Edited]

[Old question] How can you know if your function concumer used await on invoking your function or not:

Maybe some magic like this:

function x(){
   return new Promise((resolve, reject)=>{
       console.log(x.awaitWasCalled) // true  
   })
}
const a = await x()

I’m asking about that because I’ve seen Mongoose (a library) is able to detect weather you’ve called await or not, HERE
Here is what they’re saying:

Mixing promises and callbacks can lead to duplicate entries in arrays.
For example, the below code inserts 2 entries into the tags array,
*not just 1.

const BlogPost = mongoose.model('BlogPost', new Schema({
  title: String,
  tags: [String]
}));

// Because there's both `await` **and** a callback, this `updateOne()` executes twice
// and thus pushes the same string into `tags` twice.
const update = { $push: { tags: ['javascript'] } };
await BlogPost.updateOne({ title: 'Introduction to Promises' }, update, (err, res) => {
  console.log(res);
});

How Mongoose for example was able to detect that I’m using await or not?

[EDIT] ******* After sometime, I’ve noticed that the answers bellow doesn’t actually answer my question.

Please before answering my question: please read their comment above, they’re saying: " // Because there’s both await and a callback, this updateOne() executes twice"

this means: if you didn’t use await, and you passed in a callback, this code will be invoked once, BUT if you used await + callback, this code will be invoked twice, therefore: the question is: how they’re able to know if I’ve used await or not?!

Again: This means, if you didn’t use await, this is going to invoke once, and if you used await, this is going to get invoked twice.

78 thoughts on “How Mongoose is able to know that I've used await on invoking their function or not? [Edited]”

Leave a Comment