Подтвердить что ты не робот

Создать пустое обещание в 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.
});

Однако это не работает, когда пользователь присутствует. Любые идеи?

4b9b3361

Ответ 1

Как писал Бикси, вы можете использовать $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.
});

Ответ 2

При использовании native es-6 promises вы можете использовать Promise.resolve(), чтобы создать немедленно разрешенное обещание. Это полезно при компоновке promises.

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