javascript 在angularjs创造空洞的承诺?

w51jfk4q  于 2023-01-07  发布在  Java
关注(0)|答案(2)|浏览(113)

我想做这样的事情:

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.
});

然而,当用户在场时,这不起作用。有什么想法吗?

rkttyhzu

rkttyhzu1#

就像Bixi写的那样,你可以使用$q.when()来 Package 一个承诺或者一个值到一个承诺中,如果你传递给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.
});
xytpbqjk

xytpbqjk2#

当使用本机es-6承诺时,可以使用Promise.resolve()创建一个立即解析的承诺,这在编写承诺时很有用。

var p = Promise.resolve();
for (var i=0; i<something.length; i++) {
    p = p.then(UserService.create(newUsers[i]));
}
p.catch(function(e) {
    console.error('oops: ', e);
}).then(function() {
    console.log('done.');
});

相关问题