gpt4 book ai didi

javascript - 当返回的数据集有限时,如何使用 Angular 1.6.5 递归调用 $http 请求

转载 作者:行者123 更新时间:2023-12-03 03:46:09 25 4
gpt4 key购买 nike

我想使用 Angular 1.6.5 进行项目重建,但我不确定当源一次仅返回有限数量的记录(1000 条)时如何在工厂中使用 $http.get 请求按请求返回),我需要获取超过 2000 条记录。

在我当前的代码中,我使用 jquery ajax,并在 .done 方法中检查值“__next”是否存在,如果存在,我会记得传递值“__next”的函数。当未返回“__next”值时,我会对数据执行某些操作。

function getSpecifiedList(url){

var specUrl = url;

$.ajax({
url: specUrl,
type: "GET",
headers:{"accept":"application/json;odata=verbose",
error: function(xhr){
console.log(xhr.status + " " + xhr.statusText);
}
}
}).done(function (results){
$("#wc_report_holder").text(results.length);

//buildObjects processes the results and adds to an array
buildObject(results);
if(results.d.__next){
getSpecifiedList(results.d.__next);
}else{
buildGridView();
}
}).fail(function(error){
$("#wc_report_holder").text("There was an error: " + error);
});
}

我想弄清楚如何使用最佳实践和最有效的方式在 Angular 1.6.5 中实现相同的值检查和递归调用,但我还没有运气根据 Angular 文档和谷歌搜索弄清楚它。

这是我目前使用 Angular 1.6.5 的简短版本。

<script>
var sitesApp = angular.module("sitesApp", ['ngRoute']);

sitesApp.controller('SitesListCtrl', ['$scope', 'sites',
function ($scope, sites) {
sites.list().then(function (response) {
$scope.sites = response.data.value;
});
}
]);

sitesApp.controller("SiteDetailsCtrl", ['$scope', '$routeParams', 'sites',
function ($scope, $routeParams, sites) {
sites.find($routeParams.SiteCodePc, function (site) {
$scope.site = site;
});
}
]);


sitesApp.config(function ($routeProvider, $locationProvider) {
$locationProvider.hashPrefix('!');
$routeProvider.
when('/', {
templateUrl: 'https://machine/sites/site-list.html',
controller: 'SitesListCtrl'
}).
when('/:SiteCodePc', {
templateUrl: 'https://machine/sites/site-details.html',
controller: 'SiteDetailsCtrl'
}).
otherwise({
redirectTo: '/'
});
});

sitesApp.factory('sites', ['$http', function ($http) {
var urlBase = "https://some-endpoint-for-data";
var cachedData;

function getData(callback) {
if (cachedData) {
callback(cachedData);
} else {
return $http({
method: 'GET',
url: urlBase
})
.then(function (response) {
//HERE IS WHERE I THINK THE SOLUTION NEEDS TO BE IMPLEMENTED
cachedData = response;
return cachedData;
});
}
}

return {
list: getData,
find: function (SiteCodePc, callback) {
getData(function (response) {
var site = response.data.value.filter(function (entry) {
//debugger;
return entry.SiteCodePc === SiteCodePc;
});
callback(site[0]);
});
}
};
}]);

</script>

<div ng-app="sitesApp">
<div ng-view></div>
</div>

提前致谢

最佳答案

看起来您可以在接受第二个(可选)参数的情况下进行简单的递归。如果您是第一次调用 getData(),那么您可以获得前 1000 个结果。但是,如果您找到 __next,那么您将再次调用它,发送您当前拥有的 1000 个结果,并将接下来的 1000 个结果与前 1000 个结果连接起来。

sitesApp.factory('sites', ['$http', function ($http) {
var urlBase = "https://some-endpoint-for-data";

function getData(callback, results) {
return $http({
method: 'GET',
url: urlBase
})
.then(function (response) {
// If you have found a previous batch of results then concat the two arrays
if(results) {
response = response.concat(results);
}
// If there are more results to be found then recursively call the same function passing the batched results
if(response.__next) {
return getData(callback, response);
}
// If there are no more results to be found then trigger your callback function
else {
callback(response);
}
});
}

return {
list: getData,
find: function (SiteCodePc, callback) {
getData(function (response) {
var site = response.data.value.filter(function (entry) {
//debugger;
return entry.SiteCodePc === SiteCodePc;
});
callback(site[0]);
});
}
};
}]);

关于javascript - 当返回的数据集有限时,如何使用 Angular 1.6.5 递归调用 $http 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45381234/

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