Créer une promesse vide en angulaire?

Je voudrais quelque chose comme ça:

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

Je tiens donc à déclarer une promesse qui peut être résolue à l'aide de cette option. Cependant, cette promesse peut être écrasée par une autre promesse qui renvoie le contenu. Plus tard, je souhaite résoudre la promesse de savoir s'il a un contenu ou non. Est-ce possible? J'ai essayé avec:

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

Cependant, cela ne fonctionne pas lorsqu'un utilisateur est présent. Des idées?

Comme Bixi l'a écrit, vous pouvez utiliser $q.when() qui promet une promesse ou une valeur. Si ce que vous passez when() est une promesse, cela sera renvoyé, sinon une nouvelle promesse est créée qui est résolue directement avec la valeur que vous avez passée. Quelque chose comme ceci:

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

Lorsque vous utilisez des promesses es-6 natives, vous pouvez utiliser Promise.resolve () pour créer une promesse immédiatement résolue. Ceci est utile lors de la rédaction de promesses.

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