Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在1.5版angularjs中使用$resource取消承诺_Javascript_Angularjs - Fatal编程技术网

Javascript 如何在1.5版angularjs中使用$resource取消承诺

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', {

我正在使用angular 1.5.7,如果需要时间,我想取消对资源的删除。我使用的是平均堆栈,有时我会看到我的资源上的删除被视为挂起(是mongo慢吗?)。 下面是我调用delete的控制器的工厂和代码段: *工厂:

      .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);
      };
    
    })

我看了这篇文章,读了这篇关于取消请求的文章:$resource#!使用$cancelRequest(),但我有点困惑。 有谁能告诉我如何在实施过程中取消承诺的最佳实践吗?
关于,

假设您的资源是
用户
,要取消请求,您应该命名您的操作,例如

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()
方法将不会公开。