这是我的代码:
JS:
var timer;
$scope.getapi_url = function (n) {
var url = n;
$http({
method: 'GET',
url: url,
})
.then(function successCallback(data) {
$scope.data = data.data;
console.log($scope, data);
timer = $timeout($scope.getapi_url(n), 5000);
// passing n if you don't want check n value on starting of function.
}, function errorCallback(response) {
$scope.errorBackend = true;
console.log(response);
console.log('error');
});
};
HTML:
<button class="btn btn-clear btn-sm" ng-click="getapi_url('myurl') ">Click!</button>
点击getapi_url
后,我的$timeout
在5秒钟后没有超时,但是就像每时每刻。为什么?
谢谢您提前回答!
答案 0 :(得分:3)
调用AngularJS的超时包装器的方法是:
$timeout([fn], [delay], [invokeApply], [Pass]);
您需要传递函数处理程序或将anon函数直接写入fn,而是在调用该函数。
使用:
$timeout($scope.getapi_url, 5000, false, n);
通过传递n作为参数来调用函数。
或直接编写anon函数代替fn:
$timeout(function(){
$scope.getapi_url(n)
}, 5000);
答案 1 :(得分:1)
您在这里犯了一个微妙的错误。
您无需设置$timeout
即可在5000毫秒后调用getapi_url
,而是通过以下操作立即调用getapi_url
方法:
$scope.getapi_url(n)
在此行:
$timeout($scope.getapi_url(n), 5000)
实际上,您刚刚调用了两个函数,第一个是; $scope.getapi_url(n)
,第二个存在; $timeout()
。
如果您对代码进行以下调整,则getapi_url
的5000 {ms}时间段过后,您的$timeout
方法将被调用:
function successCallback(data) {
$scope.data = data.data;
console.log($scope, data);
// This is calling getapi_url immediately, at the point of creating your timeout
// timer = $timeout($scope.getapi_url(n), 5000);
// You should do this instead
timer = $timeout(function() {
$scope.getapi_url(n);
}, 5000);
}
答案 2 :(得分:0)
尝试
timer = $timeout(function(){ $scope.getapi_url(n)}, 5000);