Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

195
Views
Using nested async await function calls

I have a very simple code I'm trying to debug. I have an async function:

async function updateResult(event){

  let result = db.fetchResult(event.ProcessId);
  return result;

}

And I'm calling this from another simple async function:

exports.processEvent = async (event) => {
  try {

    let promises = [];


    const controls = await db.fetchControls(event.EventCode);
    
    if (controls) {     
      
       promises = controls.map((control) => {
         console.log(control);
         control.map(x => this.updateResult(event));
        
       });
           
     }

    return Promise.allSettled(promises);
  }
  catch (err) {
    console.error(err);
  }
};

The problem is that in exports.processEvent, the content of db.fetchControls(event.EventCode) is executed to completion (a few logics and a db getItem call).

But the call to db.fetchResult(event.ProcessId) via this.updateResult(x.Id, x.Version, event) does NOT complete executing the fetchResult tasks (a few other logics a db GET call).

I feel like fetchResult returns prematurely. What am I doing wrong?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

.map() is NOT promise-aware. It does not wait for any of the promises in your callback to complete. So, in this piece of code:

control.map(x => this.updateResult(x.Id, x.Version, event)); 

It just runs through the entire array ignoring all the promises that are returned and thus NOTHING waits for those promises.

You can fix that by returning those promises to the higher level .map() which you are then awaiting with Promise.all():

  promises = controls.map((control) => {
     console.log(control);
     return Promise.all(control.map(x => this.updateResult(x.Id, x.Version, event)));
  });
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!