retour au cours

Récupérer des utilisateurs depuis GitHub

Créez une fonction asynchrone getUsers(names), qui obtient un tableau de connexions GitHub, récupère les utilisateurs de GitHub et renvoie un tableau d’utilisateurs GitHub.

L’URL GitHub avec les informations utilisateur pour la donnée USERNAME est : https://api.github.com/users/USERNAME.

Il y a un exemple de test dans la sandbox.

Détails importants :

  1. Il devrait y avoir une requête fetch par utilisateur.
  2. Les demandes ne doivent pas s’attendre les unes les autres. Pour que les données arrivent le plus tôt possible.
  3. Si une requête échoue, ou si l’utilisateur n’existe pas, la fonction doit retourner null dans le tableau de résultats.

Open a sandbox with tests.

Pour récupérer un utilisateur, nous avons besoin de : fetch('https://api.github.com/users/USERNAME').

Si la réponse a le statut 200, appelons .json() pour lire l’objet JS.

Sinon, si un fetch échoue, ou si la réponse a un statut différent de 200, nous renvoyons simplement null dans le tableau de résutats.

Voici donc le code :

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;
}

Veuillez noter : l’appel .then est directement attaché à fetch, de sorte que lorsque nous avons la réponse, il n’attend pas d’autres fetches, mais commence à lire .json() immédiatement.

Si nous avions utilisé await Promise.all(names.map(name => fetch(...))), et appelé .json() sur les résultats, il aurait attendu que tous les fetches répondent. En ajoutant .json() directement à chaque fetch, nous nous assurons que les fetches individuels commencent à lire les données en JSON sans s’attendre les uns les autres.

C’est un exemple de la façon dont l’API Promise de bas niveau peut toujours être utile même si nous utilisons principalement async/wait.

Ouvrez la solution avec des tests dans une sandbox.