Как решить проблему Promise {<pending>} в большом списке данных, просматривая веб-страницу? - PullRequest
0 голосов
/ 25 октября 2019

Проблема

Привет друзья,

У меня проблема, когда я хочу получить все эпизодыконкретное аниме, использующее функцию animeEpisodesVideo, показывает мне:

{episode: 1, video: Promise {<pending>}, 

, чтобы получить конкретное видео, я должен использовать getAnimeVideo function, который отвечает за возврат видео эпизода. *

Если кто-то может помочь мне решить проблему, я буду признателен за это

ПОЛУЧИТЬ все эпизоды аниме

const animeEpisodesVideo = async(id) =>{
  const res = await fetch(`${ANIME_URL}${id}`);
  const body = await res.text();
  const $ = cheerio.load(body);
  const promises = [];

  $('div.container').each((index , element) =>{
    const $element = $(element);
    const total_eps = $element.find('ul.list-group li.list-group-item').length;
    let videos = [];
    $element.find('ul.list-group li.list-group-item').each((j , elem) =>{
      const $el = $(elem);
      const eps_id = $el.find('a').attr('href').split('/')[4];
      videos = new Promise((resolve, reject) =>{
        try {
          resolve( Array.from({length: total_eps} , (v , k) =>{
            return{
              episode: k + 1,
              video: getAnimeVideo(eps_id)
            }
          }))
        }catch(error){
          console.log(error);
        }
      });
      promises.push(videos);
    });
  });

  return await Promise.all(promises)
    .then(doc =>{
      return doc[1];
    }).catch(error =>{
      console.log(error);
    });
};

// testing anime episodes videos url
// Episodes OUTPUT
//[ { episode: 1, video: Promise { <pending> } },
//  { episode: 2, video: Promise { <pending> } },
//  { episode: 3, video: Promise { <pending> } },
//  { episode: 4, video: Promise { <pending> } },
//  { episode: 5, video: Promise { <pending> } },
//  { episode: 6, video: Promise { <pending> } },
//  { episode: 7, video: Promise { <pending> } },
//  { episode: 8, video: Promise { <pending> } },
//  { episode: 9, video: Promise { <pending> } },
//  { episode: 10, video: Promise { <pending> } },
//  { episode: 11, video: Promise { <pending> } },
//  { episode: 12, video: Promise { <pending> } } ]
(async() =>{
  await animeEpisodesVideo('tokyo-ghoul')
  .then(doc =>{
    console.log(doc)
  })
})()

ПОЛУЧИТЕ один эпизод видео

const getAnimeVideo = async(id) =>{
  const res = await fetch(`${ANIME_VIDEO_URL}${id}`);
  const body = await res.text();
  const $ = cheerio.load(body);
  const videos = [];

  $('div.container').each((index , element) =>{
    const $element = $(element);
    const video = $element.find('iframe').attr('src');
    videos.push(video);
  })
  return videos.filter(v => !!v)[0];
};

Результаты, полученные с терминала

[ { episode: 1, video: Promise { <pending> } },
  { episode: 2, video: Promise { <pending> } },
  { episode: 3, video: Promise { <pending> } },
  { episode: 4, video: Promise { <pending> } },
  { episode: 5, video: Promise { <pending> } },
  { episode: 6, video: Promise { <pending> } },
  { episode: 7, video: Promise { <pending> } },
  { episode: 8, video: Promise { <pending> } },
  { episode: 9, video: Promise { <pending> } },
  { episode: 10, video: Promise { <pending> } },
  { episode: 11, video: Promise { <pending> } },
  { episode: 12, video: Promise { <pending> } } ]

Результаты, которые я должен получить, если это решит проблему

[ { episode: 1, video: eps01.mp4 },
  { episode: 2, video: eps02.mp4 },
  { episode: 3, video: eps03.mp4 },
  { episode: 4, video: eps04.mp4 },
  { episode: 5, video: eps05.mp4 },
  { episode: 6, video: eps06.mp4 },
  { episode: 7, video: eps07.mp4},
  { episode: 8, video: eps08.mp4},
  { episode: 9, video: eps09.mp4 },
  { episode: 10, video: eps10.mp4 },
  { episode: 11, video: eps11.mp4 },
  { episode: 12, video: eps12.mp4} ]
...