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?');
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();
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!!!!') })()
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.