2016-04-28 18 views
3

私はこのコードを変更して約束を返せますか? GoogleカレンダーのAPIコールは角度のある工場内で約束を返せますか?

var calApi = { 
fun3: function() { 
    gapi.auth.authorize(
     { 
     'client_id': CLIENT_ID, 
     'scope': SCOPES.join(' '), 
     'immediate': true 
     }, calApi.fun2); 
}, 
fun2: function(authResult) { 
    if (authResult && !authResult.error) { 
     calApi.fun4(); 
    } 
}, 
fun1: function(event) { 
    gapi.auth.authorize(
     {client_id: CLIENT_ID, scope: SCOPES, immediate: false}, 
     calApi.fun2); 
    return false; 
}, 
fun4: function() { 
    gapi.client.load('calendar', 'v3', calApi.fun5); 
}, 
fun5: function() { 
    // some code 
    // returning the result... 
} 
}; 
return calApi; 

私のコントローラ:

$scope.hanleAPICall = function(event) { 
    factoryName.fun1(event); 
}; 

このコードでは、Google calendar apiから取られ、イムはangularjs工場でそれを実装しようとしているが、私はのように、APIからのイベントの結果を返す必要があります私はイベントを返すと約束しますが、私のページの中には何も起こりません。あなたがサービスで約束返すために、以下のような何かを行うことができます

+0

'gapi.client.load(...)'と他のリターンは約束しますか? –

+0

私は[link](https://developers.google.com/google-apps/calendar/quickstart/js#step_2_set_up_the_sample)に表示されているように約束を返す人は誰もいないと考えます – Dimitar

+0

戻り値が約束でない場合あなたは常に$ qモジュールを使ってそれを約束することができます。 –

答えて

1

:あなた上記と同様

angular.module('app', []) 
.factory('AppService', function ($q) { 
    return { 
    fun3: fun3 
    }; 

    function fun3() { 
    var defer = $q.defer(); 

    gapi.auth.authorize(
     { 
     'client_id': CLIENT_ID, 
     'scope': SCOPES.join(' '), 
     'immediate': true 
     }, handleAuthResult); 

    function handleAuthResult (authResult) { 
     if (authResult && !authResult.error) { 
     defer.resolve(authResult); 
     } else { 
     defer.reject(authResult.error); 
     } 
    } 

    return defer.promise; 
    } 
}); 

があなたの他の方法fun1, fun2, fun4, fun5

1

ためのファクトリメソッドを作成することができますあなたは何が必要だすべてのもの、 をPromisifyすることができます(私の意見では)gapiライブラリのラッパーです。今

  1. 2つの定数(GAPI_CLIENT_ID、GAPI_SCOPES)
  2. gapiが何を行いますが、角度の方法で[Service][1]の作成を作成し、グローバル変数を避けてください。のは、あなたのコードを少しリファクタリングする必要があります

...

function GapiServiceFactory($q, GAPI_CLIENT_ID, GAPI_SCOPES) { 
 
    var self = this; 
 
    
 
    /** 
 
    * @private 
 
    **/ 
 
    self._authorize = function(immediate) { 
 
    var deferred = $q.defer(); 
 
    var data = { 
 
     client_id: GAPI_CLIENT_ID, 
 
     scope: GAPI_SCOPES, 
 
     immediate: !!immediate 
 
    }; 
 
    
 
    gapi.auth.authorize(data, function(result) { 
 
     if(Object.hasOwnProperty.call(result, 'error')) { 
 
     return deferred.reject(result); 
 
     } 
 
     
 
     return deferred.resolve(result); 
 
    }); 
 
    
 
    return deferred.promise; 
 
    }; 
 
    
 
    self.authorize = function() { 
 
    return self._authorize(false); 
 
    }; 
 
    
 
    self.authorizeImmediate = function() { 
 
    return self._authorize(true); 
 
    }; 
 
    
 
    self.loadCalendar = function() { 
 
    var deferred = $q.defer(); 
 
    
 
    gapi.client.load('calendar', 'v3', function() { 
 
     
 
     if(/**What's the logic here? **/) { 
 
     return deferred.reject(); 
 
     } 
 
     
 
     return deferred.resolve(); 
 
    }); 
 

 
    return deferred.promise; 
 
    }; 
 
} 
 

 
angular 
 
    .module('Test', []) 
 
    .constant('GAPI_CLIENT_ID', 12333) 
 
    .constant('GAPI_SCOPES', ['read', 'write']) 
 
    .service('GapiService', GapiServiceFactory) 
 
    .controller('TestCtrl', function TestCtrl(GapiService) { 
 
    GapiService 
 
     .authorizeImmediate() 
 
     .then(
 
     console.log.bind(console, 'Authorization success'), 
 
     console.log.bind(console, 'Authorization error') 
 
    ) 
 
    ; 
 
    
 
    GapiService 
 
     .loadCalendar() 
 
     .then(
 
     console.log.bind(console, 'LoadCalendar success'), 
 
     console.log.bind(console, 'LoadCalendar error') 
 
    ) 
 
    ;  
 
    }) 
 
;

関連する問題