Тебе нужно рекурсивное обещание, что-то вроде этого ...
function getCategories(nextPageUrl, categories) {
return getCategoriesService(nextPageUrl)
.then((res) => {
if(res.nextPageUrl) {
categories.push(res.categories)
return getCategories(res.nextPageUrl, categories);
}
});
}