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が依然として有用であることの例です。