0

Есть такая штука:

this.friends = Object.keys(obj).map(x => {

  this.$http.get('http://picasaweb.google.com/data/entry/api/user/'+obj[x].email+'?alt=json')
    .then(response => {
      return response.body; //это нужно вернуть
    }, response => {
      console.log(response);
    });

});

Вопрос в том, как вернуть в map функцию из then в промисе?

UPD: Ответы Здесь не помогли. Единственное, что могло бы помочь оттуда - это генератор. Но он в map функции не работает (тут прочтал и сам проверил)

1 Answers1

1

Есть у Promise метод all(), который возвращает результат выполнения всех промисов в виде массива, соответственно в твоем случае нужно составить массив этих промисов.

const arrayOfPromises = Object.keys(obj).map(x => {
  return this.$http.get('http://picasaweb.google.com/data/entry/api/user/'+obj[x].email+'?alt=json')
    .then(response => response.body);
});

Затем ты юзаешь

Promise.all(arrayOfPromises).then(result => {
  this.friends = result;
})

Где result это массив всех ответов.

Pavel Mayorov
  • 58,537
CoonJS
  • 627
  • Спасибо, вроде работает – ivan0biwan Sep 06 '17 at 19:14
  • 1
    Ну вот зачем один промиз оборачивать в другой через конструктор? Метод then уже возвращает промиз, его не надо дополнительно "промизифицировать". – Pavel Mayorov Sep 07 '17 at 07:34