返回 last30days-skill
paginate-cursor.js
根目录 / skills / last30days / scripts / lib / vendor / bird-search / lib / paginate-cursor.js
1 export async function paginateCursor(opts) {
2 const { maxPages, pageDelayMs = 1000 } = opts;
3 const seen = new Set();
4 const items = [];
5 let cursor = opts.cursor;
6 let pagesFetched = 0;
7 while (true) {
8 if (pagesFetched > 0 && pageDelayMs > 0) {
9 await opts.sleep(pageDelayMs);
10 }
11 const page = await opts.fetchPage(cursor);
12 if (!page.success) {
13 if (items.length > 0) {
14 return { success: false, error: page.error, items, nextCursor: cursor };
15 }
16 return page;
17 }
18 pagesFetched += 1;
19 for (const item of page.items) {
20 const key = opts.getKey(item);
21 if (seen.has(key)) {
22 continue;
23 }
24 seen.add(key);
25 items.push(item);
26 }
27 const pageCursor = page.cursor;
28 if (!pageCursor || pageCursor === cursor) {
29 return { success: true, items, nextCursor: undefined };
30 }
31 if (maxPages !== undefined && pagesFetched >= maxPages) {
32 return { success: true, items, nextCursor: pageCursor };
33 }
34 cursor = pageCursor;
35 }
36 }
37 //# sourceMappingURL=paginate-cursor.js.map
37 lines JAVASCRIPT