Tôi có ứng dụng sẽ mở cửa sổ bật lên yêu cầu xác nhận tại người dùng, sau đó tạo một ajax cal và đóng cửa sổ bật lên.
Tôi đã cố gắng thực hiện bằng cách sử dụng một chuỗi lời hứa (Tôi đã sử dụng nó và tôi nhớ rằng nó sẽ hoạt động theo cách này), nhưng dường như chặn sau cuộc gọi đến reservationService.confirm($scope.object);
. Bây giờ nó là một dịch vụ giả mạo được thực hiện với một setTimeout
và $q
chỉ để trả lại một lời hứa (trong tương lai nó sẽ thực hiện cuộc gọi ajax). Đây có phải là mã hợp lệ hoặc tôi không hiểu cách hoạt động của lời hứa?
Đối popup tôi chọn AngularUI và mã là thế này:Chuỗi lời hứa 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 thay đổi setTimeout
với $timeout
góc của dịch vụ
Bằng cách này nó hoạt động, nhưng nó cũng giống như cách hoạt động của 'reservationService' ... – rascio
Tôi không hiểu ý bạn muốn nói gì? – Chandermani
Tôi đã chỉnh sửa bài đăng ... nhìn ngay bây giờ có triển khai phương thức 'confirm'. Nó được thực hiện giống như cách bạn làm ... nhưng tại sao tôi phải gọi 'deferred.resolve' đi qua trong đó' lời hứa' được trả về từ dịch vụ, khi nó được giải quyết từ 'setTimeout'? – rascio