我有这样的功能:
$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
时:一切都像魅力一样。但我不认为这是一个很好的解决方案。如何在没有超时的情况下延迟我的功能?
答案 0 :(得分:0)
在异步函数中使用超时不是一个好主意:
如果您的请求时间超过了超时,那么您将收到不必要的请求。
如果您的超时时间大于请求时间,那么您将获得不必要的延迟。
您应该使用保证链来获取请求。尝试这样的事情:
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