У меня возникают проблемы при работе с API-интерфейсом "нумерация страниц", мне нужно объединить несколько объектов в один.Тем не менее, я не могу понять, как сделать это с обещаниями, и я не уверен, как работать с async / await, чтобы получить наилучшие результаты.
У меня есть класс selly, который работает с API Selly.
getAllProducts(page = 1) {
return this.makeRequest('products', { page: page });
}
makeRequest(endpoint, params = {}) {
return axios
.get(`https://selly.gg/api/v2/${endpoint}`, {
headers: {
Authorization: `Basic ${this.genApiToken(this.apiKey, this.apiEmail)}`,
'User-Agent': `username - localhost`,
},
params: params,
})
.catch((err) => {
console.log(err);
});
}
, который работал великолепно, пока я не понял, что мне нужно выбрать несколько страниц и объединить все результаты водин объект.Вот моя попытка:
app.get('/api/products', (req, res) => {
res.setHeader('Content-Type', 'application/json');
selly.getAllProducts().then((request) => {
const pages = request.headers['x-total-pages'];
let products = request.data;
if (pages > 1) {
let i = 2;
while (pages >= i) {
selly.getAllProducts(i).then((nextPageRequest) => {
nextPageRequest.data.forEach((item) => {
products.push(item);
});
});
i++;
}
}
res.send(JSON.stringify(products));
});
});
Я не могу толкнуть nextPageRequest
к products
объекту.Очевидно, потому что res.send
выполняется до того, как обещание selly.getAllProducts(i)
будет выполнено.
Я понимаю, что лучшая оптимизация для этого - это использование асинхронности и ожидания, однако я просто не могу понять базовую концепцию этого, или хорошоПо крайней мере, как бы я реорганизовал мой код для использования async и await.
Как мне заставить это работать?