I am making a request which returns paged data, so I want to call a function recursively until I have all of the pages of data, like so:
router.get("/", (req, res) => {
doRequest(1, [])
.then(result => {
res.status(200).send(result);
})
.catch(error => {
console.error(error);
res.status(500).send("Error from request");
});
});
function doRequest(page, list){
let options = {
uri : "www.example.com",
qs : { "page" : page }
};
request(options)
.then((results) => {
list.push(results);
if(page === 2){
return Promise.resolve(list);
} else {
return doRequest(++page, list);
}
})
.catch((error) => {
return Promise.reject(error);
});
}
My route is returning immediately with Cannot read property 'then' of undefined
, so doRequest()
is apparently returning undefined
right away, rather than returning the list when it is ready. I'm new to promises so I'm sure I'm missing something pretty simple.
Change the doRequest
function to
function doRequest(page, list){
let options = {
uri : "www.example.com",
qs : { "page" : page }
};
return request(options)
.then((results) => {
list.push(results);
if(page === 2){
return Promise.resolve(list);
} else {
return doRequest(++page, list);
}
})
.catch((error) => {
return Promise.reject(error);
});
}
so it can return the request, its actually returns nothing (undefined
)