angularJS:承诺的顺序

时间:2014-11-06 00:33:44

标签: angularjs

我有两个承诺:

  

getToken()//:从服务器获取CSFR cookie

  

getUseraData()//:获取用户数据,但需要从getToknen()获取cookie,否则服务器会响应错误。

所以,我知道我可以在我的控制器中执行此操作:

getToken().then(function (result) {
    getUserData(result);
});

但我知道在承诺中履行承诺并不是那么好。

那么:只有在getUserData()终止并返回值后才能执行getToken承诺?

2 个答案:

答案 0 :(得分:2)

将承诺链接起来没有任何问题,只要您不忘记返回承诺,这就是您正在做的事情,所以这样做:

var getUserDataPromise = getToken().then(function (result) {
    return getUserData(result);
});

或者像这样:

getToken().then(function (result) {
    return getUserData(result);
}).then(function(getUserDataPromiseResult){
    //here you will have the getUserData promise resolved
});

请注意,为此,您需要return承诺。我坚持认为:这不是一个坏习惯,这是 very common practice

答案 1 :(得分:0)

你可以使用延迟函数..你需要注入$ q ..

创建一个服务然后添加你的getToken http请求代码..像这样

myapp.factory('myService',$q,$http){
    var deferred = $q.defer();
        var newVal = { 'Value': val };

     var getToken = functino(){   $http({
            method: 'PATCH',
            url: baseService.getBaseService + 'ModuleAndParameters(' + ModAndParamsId + ')',
            data: newVal
        }).success(function (data, status, headers, config) {
            deferred.resolve(data)
        }).error(function (data, status, headers, config) {
            deferred.reject(status);
        });

        return deferred.promise;
  };

return getToken;
}

然后在你的控制器中,注入你的服务名称..只是简单地这样做..

 myService.getToken().then(function(result){
getUserData(result);
})

我希望它能帮助...... xD