我在尝试使用api“分页”时遇到问题,我需要将多个对象合并为一个。但是,我似乎无法弄清楚如何用Promise做到这一点,而且我不确定如何与async / await一起使用以获得最佳结果。
我有一个称为Selly的类,可与Selly API一起使用。
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)
完成之前就已经运行。
我知道,对此的最佳优化是使用异步和等待,但是我只是无法了解它的基本概念,或者,至少我将如何重构代码以使用异步和等待。
我该如何工作?
答案 0 :(得分:0)
您可以使整个soalan
处理程序foreach ($soalan_id as $question) {
$Jawapan = New Jawapan();
$Jawapan->status_pengesahan = "belum_disahkan";
$Jawapan->soalan_id = $question->soalan_id;
$Jawapan->sesi_id = $request->sesi_id;
$Jawapan->agensi_id = $request->agensi_id;
$Jawapan->save();
}
,然后向part.get_payload(decode=True).decode('utf-8')
发出初始请求以找出有多少页,然后使用app.get
循环和{{ 1}}个额外的async
调用,将结果推入await
数组。请确保for
以便处理错误:
await