我的应用程序应该打开一个弹出窗口,要求用户确认,然后进行 ajax 校准并关闭弹出窗口。
我尝试使用promise链来做到这一点(我已经使用过它,并且我记得它应该以这种方式工作),但它似乎在调用reservationService之后被阻止.confirm($scope.object);
。现在它是一个用 setTimeout
和 $q
实现的假服务,只是为了返回一个 promise (将来它将进行 ajax 调用)。这是有效的代码还是我没有理解 Promise 的工作原理?
对于弹出窗口,我选择 AngularUI,代码如下:
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});
});
预订服务:
function confirm(){
var deferred = $q.defer();
setTimeout(function(){
console.log('Confirming');
deferred.resolve(true)
}, 500);
return deferred.promise;
}
已解决
将 setTimeout
更改为 $timeout
Angular 的服务
最佳答案
使用 $timeout
而不是 setTimeout
'因为它在 Angular 范围内一起工作,强制 digest
阶段(或使用
)。setTimeout
内的 $scope.apply()
关于AngularJS promise 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18484986/