Reputation: 705
So the result in the console shows as -
Promise { <pending> } ' why is it still pending?'
[ { _id: 5a7c6552380e0a299fa752d3, username: 'test', score: 44 } ]
So it tells me Promise { pending } but then follows with the answer that I wanted to see which is -
[ { _id: 5a7c6552380e0a299fa752d3, username: 'test', score: 44 } ]
but how can I fix that promise pending section, it's a console.log that I run at the bottom of the code.
function resolveAfter1() {
return new Promise((resolve, reject) => {
var scoresFromDb = db.account.find({}, { username: 1, score: 1 }).toArray(function(err, result) {
if (err)
reject(err);
else
resolve(result);
});
});
}
resolveAfter1() // resolve function
.then((result)=>{console.log(result);})
.catch((error)=>{console.log(error);})
async function asyncCall() {
var result = await resolveAfter1();
// console.log(result);
}
console.log(asyncCall(), ' why is it still pending?');
Upvotes: 4
Views: 13866
Reputation: 7742
Replace:
console.log(asyncCall(), ' why is it still pending?');
With:
async function run() {
console.log(await asyncCall());
}
run();
You were printing the result of asyncCall
which is an async function
. Async functions wrap their returned result in a Promise
, and if you want the actual value which the promise resolved to, you have to use await someAsyncFunc()
.
Put in a simple example:
async function asyncCall() {
return 1;
}
async function run() {
console.log(asyncCall()); // this doesn't wait for the Promise to resolve
console.log(await asyncCall()); // this does
}
run();
Upvotes: 4
Reputation: 2264
Because you are console.log a AsyncFunction directly without await, it will return you a unresolved Promise object
function resolveAfter1() {
return new Promise((resolve, reject) => {
setTimeout(resolve('a'), 100)
})
}
async function asyncCall() {
var result = await resolveAfter1();
return result
}
(async () => {
console.log(await asyncCall(), ' It is not pending anymore!!!!')
})()
Upvotes: 0