gpt4 book ai didi

javascript - AngularJS - 轮询持久数据存储

转载 作者:行者123 更新时间:2023-11-28 19:33:37 26 4
gpt4 key购买 nike

这里是 Angular 菜鸟。我正在构建一个需要每秒轮询 url 的应用程序,并持久存储该数据,因为它需要由多个 View / Controller 访问。

我为处理此问题所做的是将我的http请求放入工厂,然后通过工厂中的函数将数据提供给 Controller 。我现在遇到的问题是工厂函数在 http 请求之前被调用,导致我的应用程序出现错误。

这是代码:

App.factory('metrics', function($http){
var service;
var users = [{laps:[]}];
var updateMetrics = function(){
//updates the users array in the factory
};
$http.get('data.csv').success(function(data) {
var temp_array = data.split(" ");
updateMetrics(0, temp_array);
});

service.lastLapInfo = function(){
var lastlap = [];
for (var i=0; i<users.length;i++)
{
var lap = users[i].laps[users[i].laps.length-1];
lastlap.push(lap);
}
return lastlap;
};
return service;
});

App.controller('mainController', function($scope, $http, metrics) {
$scope.users=metrics.lastLapInfo();
});

lastLapInfo() 在 http 请求之前被调用,这会导致错误,因为数组中没有数据。有什么想法吗?

此外 - 如果我通常会采用错误的方式来满足我的用例(例如,我应该使用其他东西而不是工厂),请告诉我!

最佳答案

这是一个promise的典型用例,或者 Angular $q service .

以下方法使用返回 promise 的工厂:

App.factory('metrics', function($http){
var service;
...
service.load = function () {
return $http.get('data.csv');
});
return service;
});

然后在 Controller 中调用指标服务,并使用 promise :

App.controller('mainController', function($scope, $http, metrics) {
metrics.load().then(function(response) {
// at this point you know for sure that the request has terminated
// you can call the service again to run lastLapInfo or do the logic in here.
});
});

关于javascript - AngularJS - 轮询持久数据存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26308643/

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