AngularJS:如何用延迟调用递归函数
AngularJS: how to call recursive function with a delay?
我有这样的功能:
$scope.getContactsByScroll = function() {
$scope.pageN = $scope.pageN + 1;
if (!$scope.allDataIsLoaded){
fetchMyDataService.getContactsByScrollService($scope.pageN).then(function(response) {
if (response.length === 0){
$scope.allDataIsLoaded = true;
}
else if (response.length !== 0 && !$scope.allDataIsLoaded){
angular.forEach(response, function(el) {
$scope.contacts.push(el);
});
//$timeout(function() {
$scope.getContactsByScroll();
//}, 2000);
}
}).catch(function() {
$scope.allDataIsLoaded = true;
});
}
};
但它甚至多次称呼自己,如果$scope.allDataIsLoaded
是false
当我设置timeout
时:一切都像魅力一样工作。但我不认为这是一个好的解决方案。如何在不超时的情况下延迟我的函数?
在异步函数中使用超时不是一个好主意:
-
如果您的请求时间较长,则超时,则会收到不必要的请求。
-
如果您的超时比请求时间更大,那么您将获得不必要的滞后。
您应该对请求使用承诺链。尝试这样的事情:
var asyncService = function ($timeout)
{
var someData = 10;
var service =
{
FetchData: function (someArray)
{
someData++;
//timeout here is just for demonstration of async request
return $timeout(function () { return someData }, 1000)
.then(function (result)
{
return service.ProcessData(result, someArray);
});
},
ProcessData: function (data, someArray)
{
console.log(data);
if (data == 15)
{
return someArray;
}
else
{
someArray.push(data)
return service.FetchData(someArray);
}
}
};
return service;
}
这是一个带有演示的 plunker
相关文章:
- jQuery递归函数调用和Javascript之间有区别吗;s setInterval
- 使用不同的变量调用递归函数
- 递归函数内部的异步调用
- 调用递归函数并保持变量本地
- 递归函数调用聚合物
- 未命名函数 JavaScript 的递归函数调用
- 为什么我的递归函数调用没有返回值
- AngularJS:如何用延迟调用递归函数
- 递归函数返回后的函数调用
- JavaScript:用Promises调用递归函数
- JavaScript中的递归函数-未正确调用它
- Javascript递归函数未调用自身
- 没有递归函数,仍然获取超出最大调用堆栈大小的错误
- javascript递归函数:Uncaught RangeError:超过了最大调用堆栈大小
- 递归函数会导致其他调用多次激发
- JSLint声称某些递归函数调用是“;超出范围”;
- Javascript:can't在递归函数调用中重新分配变量
- 在node.js中调用递归函数时为空值
- Javascript:如何编写和调用递归函数
- jQuery: AJAX中调用递归函数成功