Google api javascript客户端有时工作,有时未定义

Google api javascript客户端有时工作,有时未定义,javascript,angularjs,google-api,Javascript,Angularjs,Google Api,我正在使用GoogleAPI JavaScript客户端,遇到了一个无法解决的错误 我的HTML文件包含以下脚本: <script src="https://apis.google.com/js/client.js?onload=init"></script> 而$scope.is_backend_ready仅在加载API时才使用HTML加载$scope.list()的标记 我得到的错误是uncaughttypeerror:window.initGapi不是函数。我注

我正在使用GoogleAPI JavaScript客户端,遇到了一个无法解决的错误

我的HTML文件包含以下脚本:

<script src="https://apis.google.com/js/client.js?onload=init"></script> 
$scope.is_backend_ready
仅在加载API时才使用HTML加载
$scope.list()
的标记

我得到的错误是
uncaughttypeerror:window.initGapi不是函数
。我注意到这个错误发生在我第一次加载页面时,如果在调试过程中我在
$scope.load\u youtube\u api
函数上设置了一个断点,则api加载正确


我不明白初始化函数
window.initGapi()是如何实现的,有时会随机地被取消定义。我从谷歌开发者网站上得到了这段代码,所以也许我实现错了。感谢您的帮助。

似乎在加载脚本之前调用了函数,请将$window.initGapi函数保持在$timeout内,并在一秒钟后执行该函数。

似乎在加载脚本之前调用了函数,将$window.initGapi函数保持在$timeout内,并在一秒钟后执行该函数。

我尝试了您的建议,但没有成功。错误消息仍然是相同的。我想,我的主要问题是,我不认为我能够使用承诺,因为谷歌Javascript客户端不支持承诺,所以如何“等待”加载完成?我尝试了你的建议,它不起作用。错误消息仍然是相同的。我想,我的主要问题是,我认为我不能使用承诺,因为谷歌Javascript客户端不支持承诺,那么如何“等待”加载完成呢?
function init() {
      window.initGapi();
}
(function() {
"use strict";
var appControllers = angular.module('appControllers', ['ui.bootstrap']);
appControllers.controller('MusicCtrl', function($window, $modal, $scope ) { 

        $scope.list = function() {

            gapi.client.youtube.search.list({
                q: 'q',
                part: 'snippet'
            }).execute(function(response) {
                $scope.songs = response.result.items;
                $scope.$apply();            
            });     

        }

        $window.initGapi = function() {
            $scope.$apply($scope.load_youtube_api);
        }

        $scope.load_youtube_api = function() {
            gapi.client.setApiKey('API_KEY');
            gapi.client.load('youtube', 'v3', function() {
                $scope.is_backend_ready = true;
                $scope.list();
            });
        }