Mam swoją aplikację, która powinna otworzyć wyskakujące okienko z prośbą o potwierdzenie użytkownika, a następnie zrób kalkę ajax i zamknij okienko.
Próbowałem to zrobić przy użyciu łańcucha obietnicy (już go użyłem i pamiętam, że powinno działać w ten sposób), ale wydaje się, że blokuje po wywołaniu do reservationService.confirm($scope.object);
. Teraz jest to fałszywa usługa zaimplementowana z setTimeout
i $q
tylko po to, aby zwrócić obietnicę (w przyszłości wywoła ajax). Czy to jest prawidłowy kod, czy nie zniszczyłem tego, jak działa obietnica?
Dla popup wybiorę AngularUI i kod to:Łańcuch obiegu AngularJS
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;
}
SOLVED zmianę setTimeout
z $timeout
kątowe służba
W ten sposób działa, ale działa tak samo jak "reservationService" ... – rascio
Nie rozumiem, co masz na myśli? – Chandermani
Edytowałem post ... spójrz, teraz jest implementacja metody 'confirm'. Jest on zaimplementowany w taki sam sposób jak ty ... ale dlaczego muszę wywołać 'deferred.resolve' przekazując w nim' obietnicę' zwróconą z usługi, gdy jest to rozstrzygnięcie z 'setTimeout'? – rascio