2015-08-28 52 views
1

我正在使用Google API JavaScript客戶端,並遇到一個錯誤,我無法弄清楚如何解決。Google api javascript客戶端有時有效,有時未定義

我的HTML文件中有此腳本:

<script src="https://apis.google.com/js/client.js?onload=init"></script> 

然後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(); 
      }); 
     } 

而且$scope.is_backend_ready使用的HTML只加載標記爲$scope.list()只有當API已加載。

我得到的錯誤是Uncaught TypeError: window.initGapi is not a function。我注意到這個錯誤發生在我第一次加載頁面時,並且如果在調試過程中我在$scope.load_youtube_api函數上設置了一個斷點,則API被正確加載。

我不會理解,只有當後端準備就緒時HTML才應該加載,啓動函數window.initGapi();,可以,有時和隨機未定義。我從Google Developers網站獲得了此代碼,因此可能我錯誤地實施了它。任何幫助讚賞。

回答

0

似乎該函數在腳本獲取加載前被調用,Keep $ window.initGapi函數在$ timeout內部並在一秒鐘後執行該函數。

+0

我試過你的建議,它沒有工作。錯誤消息仍然相同。我想,我的主要問題是,我不認爲我能夠使用承諾,因爲Google Javascript客戶端不支持承諾,因此如何才能「等待」加載完成? –

相關問題