@Rapen

Почему тут повторно используется Promise.all?

Есть вот такой код c промисами почему в предпоследнем then мы опять используем promise.all, если просто вернуть map, т.е массив этих же самих промисов то undefined, почему?
let names = ['iliakan', 'remy', 'jeresig'];

let requests = names.map(name => fetch(`https://api.github.com/users/${name}`));

Promise.all(requests)
  .then(responses => {
    // все промисы успешно завершены
    for(let response of responses) {
      alert(`${response.url}: ${response.status}`); // покажет 200 для каждой ссылки
    }

    return responses;
  })
  // преобразовать массив ответов response в response.json(),
  // чтобы прочитать содержимое каждого
  .then(responses => Promise.all(responses.map(r => r.json()))) // Вот тут!
  // все JSON-ответы обработаны, users - массив с результатами
  .then(users => users.forEach(user => alert(user.name)));
  • Вопрос задан
  • 151 просмотр
Решения вопроса 1
@dimoff66
Кратко о себе: Я есть
Потому что метод json() возвращает промис, а не результат, соответственно применение к нему user.name не будет иметь смысла, так как у промиса никакого name нет, он будет только у результата, когда мы оборачиваем массив промисов в Promise.all, то функция возвращает промис, а значит в следующий then попадает уже результат вычисления, то есть данные юзеров.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Nc_Soft
А что без лапши не написать?
const fetch = require('node-fetch');
let names = ['iliakan', 'remy', 'jeresig'];
let requests = names.map(name => fetch(`https://api.github.com/users/${name}`).then(response => response.json()));

(async () => {
  const users = await Promise.all(requests);
  users.forEach(user => {
    console.log(user.name);
  })
})();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы