gapi.client.youtube未定义?

Abh*_*Ray 3 javascript youtube youtube-api youtube-javascript-api youtube-data-api

我正在尝试使用youtube api for javascript并且我得到'gapi.client.youtube is undefined'.

我已经浏览了链接:为什么来自Youtube Data Api V3的'gapi.client.youtube'未定义?,但无法得到很多帮助.

我的代码放在下面:

    <script>
         function load(){
          gapi.client.setApiKey('AIzaSyARvwirFktEIi_BTaKcCi9Ja-m3IEJYIRk');
          gapi.client.load('youtube', 'v3');
          searchA();
        //alert(gapi.client.youtube.channels);
    }

        function searchA() {
         var q = 'pink floyd';
         var request = gapi.client.youtube.channels.list({
             part: 'statistics',
             forUsername : 'GameSprout'
         });

         request.execute(function(response) {
         var str = JSON.stringify(response.result);
         alert(str);
     });
Run Code Online (Sandbox Code Playgroud)

}

<script src="https://apis.google.com/js/client.js?onload=load">    
Run Code Online (Sandbox Code Playgroud)

但它没有得到gapi.client.youtube.

谁能帮助我解决他的问题?

jlm*_*ald 12

问题是该gapi.client.load方法需要一些时间才能完成,并且它是异步的,因此您的页面(您已设置为同步)将在searchA()youtube库完全加载之前继续运行该方法.有两种方法可以解决这个问题.一种是使用load方法的回调参数,如下所示:

<html>
<body>
 <script>
        function googleApiClientReady(){
                gapi.client.setApiKey('AIzaSyARvwirFktEIi_BTaKcCi9Ja-m3IEJYIRk');
                gapi.client.load('youtube', 'v3', function() {
                        searchA();
                });
        }
        function searchA() {
                var q = 'pink floyd';
                var request = gapi.client.youtube.channels.list({
                        part: 'statistics',
                        forUsername : 'GameSprout'
                });
                request.execute(function(response) {
                        var str = JSON.stringify(response.result);
                        alert(str);
                });
        }
 </script>
Run Code Online (Sandbox Code Playgroud)

如果您愿意,还可以在加载回调周围包装一个承诺:

<html>
<body>
    <script>
        googleApiClientReady=function() {
          loadApi() = function() {
                return new Promise(function(resolve,reject){
                        gapi.client.setApiKey('AIzaSyARvwirFktEIi_BTaKcCi9Ja-m3IEJYIRk');
                        gapi.client.load('youtube', 'v3', resolve);
                });
          };
          loadApi().then(function() {
                var q = 'pink floyd';
                var request = gapi.client.youtube.channels.list({
                        part: 'statistics',
                        forUsername : 'GameSprout'
                });
                request.execute(function(response) {
                        var str = JSON.stringify(response.result);
                        alert(str);
                });
          });
        };
</script>
<script src="https://apis.google.com/js/client.js?onload=googleApiClientReady"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)