我有我的應用程序應該打開一個彈出式窗口請求在用戶確認,然後使ajax cal並關閉彈出窗口。
我試圖使用承諾(我已經使用它,並且我記得它應該以這種方式工作)的鏈,但它似乎阻止在reservationService.confirm($scope.object);
的呼叫之後。現在這是一個虛假的服務,實現了setTimeout
和$q
只是爲了回報一個承諾(將來它會做ajax調用)。這是一個有效的代碼,或者我沒有否認承諾的工作原理?
對於我選擇AngularUI和代碼的彈出是這樣的: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;
}
解決 變化setTimeout
與$timeout
角度的服務
以這種方式,它的工作方式,但它是以同樣的方式'reservationService'工作... – rascio
我不明白你的意思說什麼? – Chandermani
我正在編輯帖子......看看現在有'confirm'方法的實現。它的實現方式與你所做的一樣...但是爲什麼我必須調用'deferred.resolve'傳入從服務返回的'promise',當它從'setTimeout'中解析? – rascio