I have a task that requires fetching api data, with the constraint of only one outstanding api request at a time. Must receive a response, or time out, before issuing the next one. Since fetch (or axios) returns a promise, I can’t figure out how to wait for each promise to fulfill before issuing the next fetch.
I'm handed a large array of api url's that must all be resolved in this one-at-a-time manner before continuing.
I’m using create-react-app’s bundled dev server, and Chrome browser.
Curiously, accomplishing this via a node script is easy, because ‘await fetch’ actually waits. Not so in my browser environment, where all the fetch requests blast out at once, returning promises along the way.
Here’s a simple loop that results in the desired behavior as a node script. My question is how to achieve this one-outstanding-request-at-a-time synchronous serialization in the browser environment?
const fetchOne = async (fetchUrl) => {
    try {
        const response = await fetch(fetchUrl, { // Or axios instead    
            "headers": {
                'accept': 'application/json',
                'X-API-Key': 'topSecret'
            },
            'method': 'GET'
        })
        const data = await response.json();
        if (response.status == 200) {
            return (data);
        } else {
            // error handling
        }
    } catch(error) {
        // different error handling
    } 
}
const fetchAllData = async (fetchUrlArray) => {
    let fetchResponseDataArray = new Array();
    let fetchResponseDataObject = new Object(/*object details*/);
    for (var j=0; j<fetchUrlArray.length; j++) { // or forEach or map instead
        // Node actually synchronously waits between fetchOne calls,
        //   but react browser environment doesn't wait, instead blasts them all out at once.
        // Question is how to achieve the one-outstanding-request-at-a-time synchronous
        //   serialization in the browser environment?
        fetchResponseDataObject = await fetchOne(fetchUrlArray[j]);
        fetchResponseDataArray.push(fetchResponseDataObject);
    }
    return(fetchResponseDataArray);
}
 
     
    