小编Gre*_*lec的帖子

如何取消$资源请求

我试图找出如何使用$ resource的timeout属性动态取消挂起的请求.理想情况下,我希望能够取消具有某些属性的请求(基于发送的参数),但似乎这可能是不可能的.与此同时,我只是尝试取消所有挂起的请求,然后重置超时承诺以允许新请求.

问题似乎是$ resource配置只允许一个静态的超时值承诺.如果我正在进行单独的$ http调用,那么我可以做到这一点是有道理的,因为我可以为超时传递新的承诺,但是如何才能为$资源工作呢?我在这里设置了一个示例plunker:http://plnkr.co/edit/PP2tqDYXh1NAOU3yqCwP?p = preview

这是我的控制器代码:

app.controller('MainCtrl', function($scope, $timeout, $q, $resource) {
  $scope.canceller = $q.defer();
  $scope.pending = 0;
  $scope.actions = [];
  var API = $resource(
    'index.html', {}, {
      get: {
        method: 'GET',
        timeout: $scope.canceller.promise
      }
    }
  )

  $scope.fetchData = function() {
    if ($scope.pending) {
      $scope.abortPending();
    }
    $scope.pending = 1;
    $scope.actions.push('request');
    API.get({}, function() {
      $scope.actions.push('completed');
      $scope.pending = 0;
    }, function() {
      $scope.actions.push('aborted');
    });
  }

  $scope.abortPending = function() {
    $scope.canceller.resolve();
    $scope.canceller = $q.defer();
  }
});
Run Code Online (Sandbox Code Playgroud)

现在,取消器在有待处理的请求时工作,但我似乎无法重置它 - 一旦一个请求被中止,所有将来的请求也将被中止. …

angularjs angular-resource

27
推荐指数
2
解决办法
2万
查看次数

如何使用角度中的请求正文发送url模板参数?

假设我有一个这样的资源设置:

resource = $resource(
    "http://foo.com/service/:type/:id",
    {},
    {save: {method:'PUT', params: {type:'@type', id: '@id'}}}
);
resource.save({type:'user', id:14, name:'Bob Dole'});
Run Code Online (Sandbox Code Playgroud)

有什么方法可以阻止typeid作为请求体的一部分提交,只是发送namePUT有效载荷?我不控制我提交的API,它似乎不喜欢我发送它的额外参数.

谢谢!

更新 - 2013年10月25日 - 13:38

资源文档说:

如果参数值以@为前缀,则从数据对象中提取该参数的值(对非GET操作很有用).

这意味着这应该从数据中删除参数:

resource.save({type:'@user', id:'@14', name:'Bob Dole'});
Run Code Online (Sandbox Code Playgroud)

但它似乎没有用.还是不知所措.

angularjs angularjs-resource

21
推荐指数
2
解决办法
1万
查看次数

如何将bcache设备恢复到规则文件系统

我的笔记本电脑上有一个20 GB的SSD设备,我决定尝试使用bcache.它似乎工作,但一段时间以来,我一直在启动时收到错误:

error on 0f3bbb55-6839-4ed6-8127-7976a969f726: corrupted btree at bucket 17571, block 483, 61 keys, disabling caching
Run Code Online (Sandbox Code Playgroud)

我想我可以尝试修复这个,但我已经决定我可能更好的只是禁用bcache - 我不太了解这可能会丢失数据/头发如果出现问题,我认为我会更好关闭使用分区作为交换更快的冬眠.

我的问题是,如何在不重新格式化支持设备的情况下安全地停止在设备上使用bcache?

我使用/ dev/sda7作为我的后备设备,/ dev/sdb2作为缓存设备(/ dev/sdb1是root).

如果重要的话,我正在使用内核3.13.0-21-generic运行Ubuntu 14.04.

更新:我基本上正在寻找一种能够恢复make-bcache -B所做更改的解决方案.FWIW,我最终通过将所有内容移动到新分区并删除旧分区来解决这个问题(请参阅下面的评论),但我会留下这个问题以防万一有人有实际的解决方案.

linux filesystems block-device diskcache bcache

8
推荐指数
3
解决办法
6362
查看次数

如何在angularjs中设置条件$资源超时?

似乎很清楚如何设置一个全局方法来中止http请求.有点像

$scope.canceller = $q.defer();
var API = $resource('http:/foo.com', {}, {get: { 
    method:'GET',
    timeout:$scope.canceller.promise
}});

$scope.abortRequests = function() {
    $scope.canceller.resolve();
}
Run Code Online (Sandbox Code Playgroud)

但是,我希望能够仅中止特定请求.我可以为我需要能够中止的请求定义单独的资源,但这非常难看.当我调用可以允许超时有条件的$ resource时,有什么方法可以传入参数或其他东西吗?也许是这样的:

var API = $resource('http:/foo.com', {}, {get: { 
    method:'GET',
    timeout:function() { if (FOO) { return $scope.canceller.promise; }}
}});
Run Code Online (Sandbox Code Playgroud)

但是如何访问FOO?

感谢您的任何见解!

angularjs angular-resource angular-http

5
推荐指数
1
解决办法
3418
查看次数