bemdev
@bemdev

Почему не получается поймать промис?

Добрый день, помогите в понимание языка и промисов. Почему не работает? как будто не видно мой массив промисов из функции поиска.

const statusArray = [];

object.map((item, j) => {
  const opts = {
  maxResults: 5,
  key: users[2].token
  };
  search(item.title, opts, function(err, videos) {
    if(err) throw err;
    item.youtubeId.new = videos[0].id;
    item.videos = videos;        
    statusArray.push(ArticleController.addArticle(item))
  });
});
Promise.all(statusArray)
  .then(() => {
    //take data
  })
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Вы засовываете в Promise.all пустой массив, все push'и выполняются после того, как отрабатывает object.map (search - она же асинхронная, да?). Надо при обходе object возвращать промис, который должен резолвиться в коллбеке функции search. Как-то так:

const statusArray = object.map(item => {
  const opts = {
    maxResults: 5,
    key: users[2].token,
  };

  return new Promise((resolve, reject) => {
    search(item.title, opts, (err, videos) => {
      if (err) {
        throw err;
      }
      item.youtubeId.new = videos[0].id;
      item.videos = videos;        
      resolve(ArticleController.addArticle(item));
    });
  });
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы