Ich habe meine Anwendung, die ein Popup öffnen sollte fragen Sie eine Bestätigung an den Benutzer, dann ein Ajax Kal und schließen Sie das Popup.
Ich versuchte es mit einer Kette von Versprechen (Ich habe es bereits verwendet, und ich erinnere mich, dass es auf diese Weise funktionieren sollte), aber es scheint nach dem Aufruf an reservationService.confirm($scope.object);
zu blockieren. Jetzt ist es ein gefälschter Dienst, der mit einem setTimeout
und $q
implementiert wurde, nur um ein Versprechen zurückzugeben (in Zukunft wird es den Ajax-Aufruf machen). Ist das ein gültiger Code oder ich habe nicht verstanden, wie vielversprechend funktioniert? diese
Für das Popup-I AngularUI und den Code zu wählen ist:AngularJS Versprechen Kette
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});
});
Voranmeldungs:
function confirm(){
var deferred = $q.defer();
setTimeout(function(){
console.log('Confirming');
deferred.resolve(true)
}, 500);
return deferred.promise;
}
Änderung GELÖST setTimeout
mit $timeout
Winkel Dienst
Auf diese Weise funktioniert es, aber es ist genauso wie der 'reservationService' funktioniert ... – rascio
Ich verstehe nicht, was Sie meinen zu sagen? – Chandermani
Ich habe den Post bearbeitet ... schau mal da ist die Implementierung der 'confirm' Methode. Es ist auf die gleiche Weise implementiert, wie Sie es getan haben ... aber warum muss ich die 'deferred.resolve' aufrufen, indem ich das' Versprechen', das vom Dienst zurückgegeben wird, übergebe, wenn es von 'setTimeout' aufgelöst wird? – rascio