Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Promise { <pending> } ' why is it still pending?' How can I fix this?

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?');
like image 649
Andrew Avatar asked Oct 21 '25 15:10

Andrew


1 Answers

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();
like image 196
Daniel Conde Marin Avatar answered Oct 23 '25 03:10

Daniel Conde Marin



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!