gpt4 book ai didi

angularjs - 如何在 angularjs 中设置条件 $resource 超时?

转载 作者:行者123 更新时间:2023-12-03 17:51:35 27 4
gpt4 key购买 nike

如何设置一个全局方法来中止 http 请求似乎很清楚。类似的东西

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

$scope.abortRequests = function() {
$scope.canceller.resolve();
}

但是,我希望能够仅中止特定请求。我可以为我需要能够中止的请求定义单独的资源,但这非常难看。当我调用可能允许超时有条件的 $resource 时,有什么方法可以传递参数或其他东西吗?也许沿着以下路线:
var API = $resource('http:/foo.com', {}, {get: { 
method:'GET',
timeout:function() { if (FOO) { return $scope.canceller.promise; }}
}});

但是我如何访问 FOO?

感谢您的任何见解!

最佳答案

也许您可以尝试将您的 $resource 包装为模型并通过这样的服务调用访问数据。该示例显示,只有 $routeChangeStart 解决超时 promise 。所以正如你提到的,它是有条件的。

app.factory('fooModel', function ($resource) {
return function (canceler) {
return $resource('http:/foo.com', {},
{
query: {method:'GET', timeout: canceler.promise },
}
);
};
});

app.service('fooService', function (fooModel, $q, $rootScope) {
this.getBar = function(whatEver) {
var deferred = $q.defer();
var params = {};
var canceler = $q.defer();

$rootScope.$on('$routeChangeStart', function () {
canceler.resolve();
});

fooModel(canceler).query(
params,
function(response) {
deferred.reject(response);
}, function(error) {
deferred.reject(error);
});
return deferred.promise;
};
});

关于angularjs - 如何在 angularjs 中设置条件 $resource 超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20154037/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com