基本的なページネーション
quick-start.ts
Copy
Ask AI
import { Client, UserPaginator, PaginatedResponse, Schemas } from '@xdevplatform/xdk';
const client: Client = new Client({ bearerToken: 'your-bearer-token' });
// 任意のリスト系エンドポイントを適切な型でラップする
const followers: UserPaginator = new UserPaginator(
async (token?: string): Promise<PaginatedResponse<Schemas.User>> => {
const res = await client.users.getFollowers('<userId>', {
maxResults: 100,
paginationToken: token,
userfields: ['id','name','username'],
});
return {
data: res.data ?? [],
meta: res.meta,
includes: res.includes,
errors: res.errors
};
}
);
手動ページング
Copy
Ask AI
import { UserPaginator, Schemas } from '@xdevplatform/xdk';
await followers.fetchNext(); // 1ページ目
while (!followers.done) {
await followers.fetchNext(); // 以降のページ
}
const userCount: number = followers.users.length; // 取得済みユーザー数の合計
const firstUser: Schemas.User | undefined = followers.users[0];
const nextToken: string | undefined = followers.meta?.next_token;
非同期反復処理
Copy
Ask AI
import { Schemas } from '@xdevplatform/xdk';
for await (const user of followers) {
const typedUser: Schemas.User = user;
console.log(typedUser.username); // 型安全にアクセス可能
}
次のページを新しいインスタンスとして扱う
Copy
Ask AI
import { UserPaginator } from '@xdevplatform/xdk';
await followers.fetchNext();
if (!followers.done) {
const page2: UserPaginator = await followers.next(); // 次のページから開始する独立した Paginator
await page2.fetchNext();
console.log(page2.users.length); // 2ページ目の項目
}
エラー処理とレート制限
Copy
Ask AI
import { UserPaginator, Schemas } from '@xdevplatform/xdk';
try {
for await (const item of followers) {
const user: Schemas.User = item;
// ユーザーを処理する
}
} catch (err: unknown) {
if (followers.rateLimited) {
console.error('レート制限に達しました。バックオフが必要です');
// バックオフして後で再試行
} else {
console.error('ページネーションのエラー:', err);
throw err;
}
}