javascript - google calendar api 调用可以在 Angular 工厂内返回一个 promise 吗?

标签 javascript angularjs promise google-calendar-api

我可以更改此代码以使其返回 promise 吗?

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;

我的 Controller :

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

此代码取自谷歌calendar api我试图在 angularjs 工厂中实现它,但我需要从 api 返回事件的结果作为我返回事件的 promise ,但我的页面内没有任何反应。

最佳答案

您可以执行如下操作以返回服务 promise :

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

关于javascript - google calendar api 调用可以在 Angular 工厂内返回一个 promise 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36907532/

相关文章:

javascript - 使用javascript缩小img

Javascript 提交按钮不起作用

javascript - AngularJS 无法使用哈希跳转到 anchor

javascript - jQuery 顺序执行异步事件

javascript - Promise 在代码块完成之前就已解决

c# - 如何在代码隐藏中访问 JavaScript 对象 (C#/ASP.NET)

javascript - jQuery 查找具有特定类的前一个 li

javascript - 子状态不等待父解决

javascript - Restangular 没有调用服务器

JavaScript异步: Log the response from each action in the order it was called