Мне нужно получить список элементов из конечной точки API (/products), но они разбиты на страницы (максимум 200 элементов на странице).
Мне нужно сделать цикл, который получит 200 продуктов, переместит их в массив и увеличит номер страницы, чтобы он мог запросить еще 200 продуктов. Он остановится, когда появится ошибка 404 (страница не существует), что означает, что я получил все продукты.
Я использую Axios для запросов, основанных на обещаниях, но я не могу заставить его работать. Я пробовал несколько вещей, даже создавая свои собственные промисы, но результаты такие же:
- Не могу заставить его ждать, пока будут запрошены все страницы
- Он всегда будет запрашивать одну и ту же страницу, потому что приращение страницы находится внутри .then обещания (чтобы быть уверенным, что я не выйду за пределы последней страницы)
Я знаю, что идея Promises заключается в том, чтобы быть асинхронной, но я пытаюсь найти способ заставить ее работать.
Кто-нибудь знает, какую логику я мог бы использовать для этого? Я просто хочу получить все предметы, прежде чем двигаться дальше. Может быть, я слишком усложняю, некоторые разъяснения очень помогли бы.
РЕДАКТИРОВАТЬ:
Пытался сделать это рекурсивно, но результат всегда возвращается до выполнения:
module.exports = {
sync(req, res) {
// Get all products page by page
var products = module.exports.getProductsByPage()
res.status(200).send(products)
},
getProductsByPage(page = 1, products = []) {
nuvemshop.get(`products?page=${page}&per_page=200`)
.then(res => {
console.log('GET Products PAGE ' + page)
products.push(res.data)
arguments.callee(++page, products)
})
.catch(e => {
if(e.response.status === 404) {
console.log('LAST PAGE REACHED')
return products
} else
return e
})
},
getProductsByPage
вместоarguments.callee
, а стрелочные функции не имеютarguments
. Единственным утверждением является то, что функции должны возвращать обещаниеx=>y
, которое возвращает y, потому что это то же самое, что иx=>{return y;}
илиfunction(x){return y;}
. Если вы делаете много запросов, вы можете подумать о параллельном регулировании и перехвате запросов по железной дороге. 06.02.2018