Javascript中的异步YouTube API调用



我想使用YouTube API获得我所有的YouTube订阅。然而,谷歌将API调用中返回的项目数量限制为50。如果我订阅了100多个频道,我将不得不循环API调用来获取所有这些频道。现在我只想在"Inspect popup"调试控制台中控制台.log()。

我读了很多关于如何在Javascript中的循环中进行异步调用的文章,但所有这些都使用了基本的for()循环。在使用YouTube数据API的情况下,您必须进行API调用,然后使用nextPageToken属性来获取下一个页面。

这是我当前的popup.js文件:

$(document).ready(function() {
    var ClientID = '[my client id]';
    $('#testBtn').click(function() {
        chrome.identity.getAuthToken({"interactive": true}, function(token) {
            GetInfo(token, "");
        });
    });
    function GetInfo(userToken, pageToken) {
        $.ajax({
            url: "https://www.googleapis.com/youtube/v3/subscriptions", 
            type: 'GET',
            data: {
                part: "snippet",
                mine: "true",
                nextPageToken: pageToken,
                access_token: userToken
            },
            success: function(data) {
                var allIds = "";
                $.each(data.items, function(i, item) {
                    console.log(item.snippet.resourceId.channelId);
                });
                var nextPageToken = data.nextPageToken;
                if (typeof nextPageToken !== 'undefined')
                {
                    GetInfo(userToken, nextPageToken);
                }

            },
            error: function(xhr, status, error) {
                console.log(xhr.responseText);
            }
        });
    }
});

我意识到,通常情况下,你不应该在popup.js中进行API调用,但我只想让它工作起来,然后我会把它移到后台脚本中。

这个代码第一次执行时效果很好;执行success函数并记录通道id。所以我知道这不是身份验证的问题。但是,当在success回调中再次调用GetInfo()函数时,data参数保持不变。因此,我的脚本只是无限期地一次又一次地记录第一次回调中的数据。

我想说这是Javascript中闭包的一个问题,但我不知道ajax调用中的语法会是什么样子。

如果有人能帮忙,那就太好了!

根据文档,API的参数名称为pageToken,而不是nextPageToken。您的nextPageToken参数可能会被API忽略,因此您会一次又一次地获得第一个页面。所以你应该有:

        data: {
            part: "snippet",
            mine: "true",
            pageToken: pageToken,
            access_token: userToken
        },

相关内容

  • 没有找到相关文章

最新更新