【问题标题】:AngularJS returning a promise from serviceAngularJS 从服务返回一个承诺
【发布时间】:2014-04-29 13:48:01
【问题描述】:

我使用以下代码从客户端 API 获取我的 AngularJS 应用程序令牌,然后将此令牌保存在每 30 分钟到期的 cookie 中。我已经添加了代码来首先检查 cookie 如果它没有过期,那么我可以使用 cookie 中的令牌,如果过期,那么我将从服务器请求一个新的令牌。

我现在面临的问题是 getToken 必须返回一个 Promise,如果我使用 $http 调用 API,这很容易,但想知道如何在检查 cookie 后返回一个 Promise 并从 cookie 中返回令牌而不调用 API?任何例子都受到高度赞赏。谢谢

  getToken : function(){
      var token = '';
      var deferred = $q.defer();
      var urlString = 'http://domainname.com/client.php';

      //returns '' if cookie expired or token if cookie exist...
      token = LocalService.getTokenCookie();

     if(token == ''){
      $http({ method:'POST',
            url: urlString,
            headers: { 'content-type' : 'application/x-www-form-urlencoded; charset=UTF-8'
            },
            responseType: 'json'
       }).success(function(data,status,headers,config){
            deferred.resolve(data);
            token = data.Token;
            //....save token in a cookie...          
      }).error(function(data,status,headers,config){ 
            deferred.reject(status);
      });           
      }
      return deferred.promise;   
   }

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    您可以立即解决延迟问题,promise.then(...) 仍将被正确处理(即使在解决后调用)。例如:

    getToken : function(){
        var token = '';
        var deferred = $q.defer();
        ...
        token = LocalService.getTokenCookie();
    
        if(token == ''){
            $http({...}).success(function (data) {
                deferred.resolve(data);
                ...
            }).error(function (data, status) { 
                deferred.reject(status);
            });
        } else {
            /* Resolve immediatelly */
            deferred.resolve(token);
        }
    
        return deferred.promise;   
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-19
      • 2014-04-12
      相关资源
      最近更新 更多