У меня есть приложение, которое должно открыть всплывающее окно с запросом подтверждения у пользователя, затем сделать ajax cal и закрыть всплывающее окно.
Я попытался сделать это, используя цепочку обещание (я уже использовал его, и я помню, что он должен работать таким образом), но он, кажется, блокируется после вызова reservationService.confirm($scope.object);
. Теперь это поддельный сервис, реализованный с setTimeout
и $q
, чтобы вернуть обещание (в будущем он сделает вызов ajax). Является ли это действительным кодом, или я не понял, как работает обещание?
Для всплывающего окна я выбираю AngularUI и код заключается в следующем:AngularJS bond chain
reservationService.book($scope.object, day)
.then(function(){
var dialogOpts = {/* dialog options omitted*/}
return $dialog.dialog(dialogOpts).open();
})
.then(function(result){
console.log('confirmed? ', result);
if (result){
//After this line it doesn't do nothing, also if the promise is resolved
return reservationService.confirm($scope.object);
}
})
.then(function(){
//this function is never executed
$scope.$emit('object:detail',{object: $scope.object});
});
reservationService:
function confirm(){
var deferred = $q.defer();
setTimeout(function(){
console.log('Confirming');
deferred.resolve(true)
}, 500);
return deferred.promise;
}
решаемые изменения setTimeout
с $timeout
углового служения
Таким образом, это работает, но так же работает 'bookService' ... – rascio
Я не понимаю, что вы хотите сказать? – Chandermani
Я редактировал сообщение ... посмотрите, есть ли реализация метода 'confirm'. Он реализуется так же, как и вы ... но почему я должен вызывать 'deferred.resolve', передавая в нем' обещание', возвращенное из службы, когда это решение из 'setTimeout'? – rascio