GitHub からユーザーをフェッチ
GitHubログインの配列を取得し、GitHubからユーザーを取得してGitHubユーザーの配列を返す非同期関数getUsers(names)を作成します。
指定されたUSERNAMEのユーザー情報を含むGitHub URLは次のとおりです:https://api.github.com/users/USERNAME.
サンドボックスにはテスト例があります。
重要な詳細
- ユーザーごとに1つの
fetchリクエストが必要です。 - リクエストは互いに待つ必要はありません。そのため、データはできるだけ早く到着します。
- リクエストが失敗した場合、またはそのようなユーザーが存在しない場合、関数は結果配列に
nullを返す必要があります。
ユーザーを取得するには、fetch('https://api.github.com/users/USERNAME')が必要です。
応答のステータスが200の場合、.json()を呼び出してJSオブジェクトを読み取ります。
それ以外の場合は、fetchが失敗するか、応答のステータスが200以外の場合は、結果配列にnullを返すだけです。
それで、ここにコードがあります
async function getUsers(names) {
let jobs = [];
for(let name of names) {
let job = fetch(`https://api.github.com/users/${name}`).then(
successResponse => {
if (successResponse.status != 200) {
return null;
} else {
return successResponse.json();
}
},
failResponse => {
return null;
}
);
jobs.push(job);
}
let results = await Promise.all(jobs);
return results;
}
注意: .then呼び出しは直接fetchにアタッチされているため、応答がある場合、他のフェッチを待たずに、.json()の読み取りをすぐに開始します。
await Promise.all(names.map(name => fetch(...)))を使用し、.json()を結果に対して呼び出した場合、すべてのフェッチが応答するのを待機することになります。 .json()を各fetchに直接追加することで、個々のフェッチが互いに待つことなくJSONとしてデータの読み取りを開始することが保証されます。
これは、主にasync/awaitを使用する場合でも、低レベルのPromise APIが依然として有用であることの例です。