Javascript 如何在1.5版angularjs中使用$resource取消承诺
我正在使用angular 1.5.7,如果需要时间,我想取消对资源的删除。我使用的是平均堆栈,有时我会看到我的资源上的删除被视为挂起(是mongo慢吗?)。 下面是我调用delete的控制器的工厂和代码段: *工厂:Javascript 如何在1.5版angularjs中使用$resource取消承诺,javascript,angularjs,Javascript,Angularjs,我正在使用angular 1.5.7,如果需要时间,我想取消对资源的删除。我使用的是平均堆栈,有时我会看到我的资源上的删除被视为挂起(是mongo慢吗?)。 下面是我调用delete的控制器的工厂和代码段: *工厂: .factory('addressesFactory', ['$resource', 'baseURL', function ($resource, baseURL) { return $resource(baseURL + 'addresses/:id', {
.factory('addressesFactory', ['$resource', 'baseURL', function ($resource, baseURL) {
return $resource(baseURL + 'addresses/:id', {id: '@_id'}, {
'update': {
method: 'PUT'
},
'delete': {
method: 'DELETE'
}
});
}])
- 控制器中的代码段:
$scope.delete = function (address, addressesList) { $scope.deleteDisabled=true; console.log('[ModeratorsCtrl] Deleting:' + address.name); console.log('[ModeratorsCtrl] ' + addressesList.length); addressesFactory.delete({id: address._id}).$promise.then( function (response) { $scope.deleteDisabled=false; console.log('[ModeratorsCtrl] Address deleted successfully'); }, function (response) { $scope.deleteDisabled=false; var message = '[ModeratorsCtrl] Error: ' + response.status + ' ' + response.statusText; console.log(message); } );
})$scope.delete = function (address, addressesList) { $scope.deleteDisabled = true;//prevent multiple click var deleteRequest = addressesFactory.delete({id: address._id}); deleteRequest.$promise.then( function (response) { $scope.deleteDisabled = false; console.log('[ModeratorsCtrl] Address deleted successfully'); }, function (response) { $scope.deleteDisabled = false; var message = '[ModeratorsCtrl] Error: ' + response.status + ' ' + response.statusText; console.log(message); } ); $timeout(function () {//2 seconds then cancel the promise if ($scope.deleteDisabled === true) { console.log('[ModeratorsCtrl] Cancel ...'); deleteRequest.$cancelRequest(); $scope.deleteDisabled = false; } }, 2000); };
关于,假设您的资源是
用户
,要取消请求,您应该命名您的操作,例如
var request = Users.query();
在这一点上,请求就是承诺。你可以简单地做一个
request.$cancelRequest();
取消。谢谢您的帮助
我在工厂里做了以下工作:
.factory('addressesFactory', ['$resource', 'baseURL', function ($resource, baseURL) {
return $resource(baseURL + 'addresses/:id', {id: '@_id'}, {
'update': {
method: 'PUT'
},
'delete': {
method: 'DELETE',
cancellable: true
}
});
}])
然后在我的控制器中:
$scope.delete = function (address, addressesList) {
$scope.deleteDisabled=true;
console.log('[ModeratorsCtrl] Deleting:' + address.name);
console.log('[ModeratorsCtrl] ' + addressesList.length);
addressesFactory.delete({id: address._id}).$promise.then(
function (response) {
$scope.deleteDisabled=false;
console.log('[ModeratorsCtrl] Address deleted successfully');
},
function (response) {
$scope.deleteDisabled=false;
var message = '[ModeratorsCtrl] Error: ' + response.status + ' ' + response.statusText;
console.log(message);
}
);
$scope.delete = function (address, addressesList) {
$scope.deleteDisabled = true;//prevent multiple click
var deleteRequest = addressesFactory.delete({id: address._id});
deleteRequest.$promise.then(
function (response) {
$scope.deleteDisabled = false;
console.log('[ModeratorsCtrl] Address deleted successfully');
},
function (response) {
$scope.deleteDisabled = false;
var message = '[ModeratorsCtrl] Error: ' + response.status + ' ' + response.statusText;
console.log(message);
}
);
$timeout(function () {//2 seconds then cancel the promise
if ($scope.deleteDisabled === true) {
console.log('[ModeratorsCtrl] Cancel ...');
deleteRequest.$cancelRequest();
$scope.deleteDisabled = false;
}
}, 2000);
};
希望这是最好的做法,请随时反馈。这是最新的一个:感谢您提供的链接,关于如何在我的情况下使用$cancelRequest()有什么想法吗?好的,谢谢,我会尝试一下,我想我必须在控制器中的delete调用之后执行这样的调用:AddresssFactory。$cancelRequest();假设我在我的工厂中设置了Cancelable:true,请确保通过在资源上设置
Cancelable:true
,否则$cancelRequest()
方法将不会公开。