Синхронные вызовы API YouTube внутри цикла - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь получить все "Понравившиеся видео" в Youtube через Youtube API, потому что я не смог получить его в качестве плейлиста.Поскольку я ограничен 50 maxResults, я зацикливаюсь на видео 50 на 50. Я печатаю результаты, получаю nextPageToken, затем делаю еще один вызов APIна следующем повороте цикла.

Моя проблема в nextPageToken не меняется, поэтому я продолжаю получать один и тот же набор из 50 видео.Я предполагаю, что это вызвано асинхронными вызовами API, поэтому цикл запускается, регистрирует все вызовы, прежде чем получить первый (второй в сценарии) ответ.Таким образом, все зарегистрированные вызовы, зарегистрированные с одинаковым nextPageToken, получают одинаковые результаты.В соответствии с этим сценарием я пытался найти способ вызывать списки без , затем () , мне не удалось.

'use strict';
let maxResults = 50;
gapi.client.youtube.videos.list({
        'part': 'snippet,contentDetails,statistics',
        'myRating': 'like',
        'maxResults': maxResults
    }).then(function (response) {
        let likedVideosCount = response.result.pageInfo.totalResults;

        if (likedVideosCount > 0) {
            let videoIndex = 0;
            //let playlist = addPlaylistItem('Liked Videos', likedVideosCount);
            let pageVideoCount = response.result.items.length;
            if (likedVideosCount > maxResults) {
                let nextPageToken = response.result.nextPageToken;
                let _likedVideosCount = likedVideosCount - pageVideoCount;
                for (let page = _likedVideosCount; page > maxResults; page -= pageVideoCount) {
                    _likedVideosCount -= pageVideoCount;
                    gapi.client.youtube.videos.list({
                        'part': 'snippet,contentDetails,statistics',
                        'myRating': 'like',
                        'maxResults': maxResults,
                        'pageToken': nextPageToken
                    }).then(function (videoResponse) {
                       nextPageToken = videoResponse.result.nextPageToken;
                        console.log(nextPageToken );
                        }

                    });
                }
            }
        }
    });
...