微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

高效设计链式承诺

如何解决高效设计链式承诺

一个外部 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 举报,一经查实,本站将立刻删除。