在angular度创造空的承诺?

我会想这样的事情:

var promise = IAmAEmptyPromise; if(condition){ promise = ApiService.getRealPromise(); } promise.then(function(){ //do something }); 

所以我想宣布一个承诺,可以用这个承诺来解决。 但是,这个承诺可能会被另一个承诺所覆盖,这个承诺会返回内容。 后来我想解决承诺是否有内容。 这可能吗? 我试着用:

 var promise = $q.defer().promise; if(!$scope.user){ promise = UserService.create(params); } promise.then(function(){ //either user was created or the user already exists. }); 

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

$q.when()写的,你可以使用$q.when()来包装承诺或价值承诺。 如果你传递的是when()是一个promise,那么它将被返回,否则就会创build一个新的promise,它将直接用你传入的值来parsing。

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

当使用原生es-6承诺时,可以使用Promise.resolve()来创build一个立即解决的承诺。 这在撰写承诺时很有用。

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