简体   繁体   中英

Node.js - http request is not working when inside a while loop

I'm using the unirest library to fetch all of the data from an api, which is split up by offset and limits parameters, and has no finite number of results.

I'm using a while condition to iterate through the data and at the point where no results are returned, I end the loop by setting an 'incomplete' variable to false.

But for some reason, when I run the following code nothing happens (as in no data is added to my database and nothing is outputted to the console) until I get the 'call_and_retry_last allocation failed' error (assuming this happens when a while loop goes on too long). But when I remove the while condition altogether the code works fine.

Is there a particular reason why this isn't working?

Here's my code:

var limit = 50,
    offset = 0,
    incomplete = true;

while (incomplete) {

    // make api call
    unirest.get("https://www.theapiurl.com")
        .header("Accept", "application/json")
        .send({ "limit": limit, "offset": offset })
        .end(function (result) {

            // parse the json response
            var data = JSON.parse(result.raw_body);

            // if there is data
            if( data .length > 0 )
            {
                // save the api data
                // + increase the offset value for next set of data
                offset += limit;
            } 
            else
            {
                // if there is no data left, end loop
                incomplete = false;
                console.log("finished!");
            }
        });
    }

You can use recurrcive function as

function getServerData(offset){

//Your api service with callback.if there is a data then call it again with the new offset.

}
function getServerData(1);

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM