如何解决高效设计链式承诺
有一个外部 API,每次调用返回 20 个对象。如果有更多对象,响应还包含下一页 URL(另外 20 个)。
我已经探索过 async parallelLimit,但是当下一次执行依赖于上一次执行时,它不适合上述场景。
我想出的唯一解决方案是使用 do...while
循环,但是它非常慢,因为页面大小可能是 2000(2k 页 * 每页 20 条记录 = 40k)。不幸的是,获取记录需要 7-20 分钟。我将这些记录存储在缓存中,但在到期后,刷新缓存所需的时间相同。
因此寻求一些关于如何优化的建议。 有异步方法吗?
const getAllRecords = async (baseUrl,oauthToken) =>. {
let records = [];
let pageCount = 0;
let response;
let success = false;
do {
// which page
pageCount = pageCount + 1;
// axios request for 20 records
response = await axios.get(baseUrl + RESOURCE_ENDPOINT,{
headers: {
'Content-Type': 'application/json','Authorization': 'Bearer ' + oauthToken
},params: {
page: pageCount,page_length: 20
}
}
);
success = (response.status === 200);
if (success) {
records = records.concat(response.data.data);
}
console.log('page=' + pageCount + ' | totalRecords=' + records.length);
console.log(response.data.pagination.next_page); // next page
} while (success && response.data.pagination.next_page);
return records;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。