Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

script taking long time to run due to multiple api calls

I am running 3 API requests and they are making my JS script very slow.

The goal is to fetch data from the API and push it my database.

First 2 API is called using date and next_page_token. So until there is a next page token i keep calling these 2 APIs. I call them recursively.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

I store the id that i get from above in an array and pass it to the next 2 APIs.

The last API call run in a loop. I loop through the ids and call the API each time.

Code:

export async function getFirstAPI(access_token, start, end, globalObject){
       let url = 'baseAPI/meetings/from=start/to=end/next_page_token=globalObject.next_page_token';
        var obj = {
            method: 'GET',
            headers: {
            authorization: 'Bearer {yourtokenhere}'
            }
         }

     let response = await fetch(url, obj)
     let data = await response.json()

     return data
}

export async function getSecondAPI(access_token, start, end, globalObject){
       let url = 'baseAPI/chats/from=start/to=end/next_page_token=globalObject.next_page_token';
        var obj = {
            method: 'GET',
            headers: {
            authorization: 'Bearer {yourtokenhere}'
            }
         }

     let response = await fetch(url, obj)
     let data = await response.json()

     return data
}

export async function getThirdAPI(access_token, id_array, globalObject){

 for(let i=0; i<id_array.length; i++){
       let url = 'baseAPI/participants/{id}';
        var obj = {
            method: 'GET',
            headers: {
            authorization: 'Bearer {yourtokenhere}'
            }
         }

     let response = await fetch(url, obj)
     let data = await response.json()
     globalObject.store_data.push(data)
   }

 return globalObject
 
}

When i run the above for a single day. That alone takes 14min 20sec. If i run it for a wider date range i am guessing this will go on for hours!!

Is there a way i can optimize this code? Or is it supposed to take this much time to run?

Any suggestions would be great!!

>Solution :

Switch from await in your loop to Promise.all or Promise.allSettled. It will work much faster. Await is not a silver bullet. It helps but in your case you are waiting for a response on each iteration instead of.. something like "fire all and collect results"

export async function getThirdAPI(access_token, id_array, globalObject) {
  const apiPromises = id_array.map(async (id) => {
    let url = `baseAPI/participants/${id}`;
    var obj = {
      method: 'GET',
      headers: { /* */ },
      authorization: `Bearer ${access_token}`
    }
    const response = await fetch(url, obj);
    return await response.json();
  });
  const results = await Promise.all(apiPromises);
  // in case globalObject.store_data is an array
  globalObject.store_data.push(...results);
  return globalObject;
}
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading