一尘不染

在角度创建空的承诺?

angularjs

我想做这样的事情:

var promise = IAmAEmptyPromise;

if(condition){
    promise = ApiService.getRealPromise();
}

promise.then(function(){
    //do something
});

因此,我想声明一个承诺,可以使用then来解决。但是,此承诺可能会被另一个返回内容的承诺覆盖。以后我想解决诺言是否有内容。这可能吗?我尝试过:

var promise = $q.defer().promise;

if(!$scope.user){
    promise = UserService.create(params);
}

promise.then(function(){
   //either user was created or the user already exists.
});

但是,当用户在场时这不起作用。有任何想法吗?


阅读 253

收藏
2020-07-04

共1个答案

一尘不染

就像Bixi所写的那样,您可以使用$q.when()将承诺或价值包装到承诺中。如果您传递给的when()是承诺,则将返回该承诺,否则将创建一个新的承诺,并直接使用您传递的值来解决。类似以下内容:

var promise;
if(!$scope.user){
  promise = UserService.create(params);
} else {
  promise = $q.when($scope.user);
}

promise.then(function(user){
  //either user was created or the user already exists.
});
2020-07-04