Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS-轮询到持久数据存储_Javascript_Angularjs_Http_Polling - Fatal编程技术网

Javascript AngularJS-轮询到持久数据存储

Javascript AngularJS-轮询到持久数据存储,javascript,angularjs,http,polling,Javascript,Angularjs,Http,Polling,这里有个角。我正在构建一个应用程序,它需要每秒轮询一个url,并持久存储该数据,因为它需要由多个视图/控制器访问 我所做的是将我的http请求放入工厂,然后通过工厂中的函数将数据提供给控制器。我现在遇到的问题是,工厂函数在http请求之前被调用,导致我的应用程序出错 代码如下: App.factory('metrics', function($http){ var service; var users = [{laps:[]}]; var updateMetrics =

这里有个角。我正在构建一个应用程序,它需要每秒轮询一个url,并持久存储该数据,因为它需要由多个视图/控制器访问

我所做的是将我的http请求放入工厂,然后通过工厂中的函数将数据提供给控制器。我现在遇到的问题是,工厂函数在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();
});
App.factory('metrics',函数($http){
var服务;
var用户=[{laps:[]}];
var updateMetrics=函数(){
//更新工厂中的用户阵列
};
$http.get('data.csv')。成功(函数(数据){
var temp_数组=data.split(“”);
updateMetrics(0,临时数组);
});
service.lastLapInfo=函数(){
var lastlap=[];

对于(var i=0;i,如果您没有立即获得数据,可以通过在返回值(
null
undefined
[]
)中指示它来处理,或者在最初获取数据之后存储并解析

大概是

var deferred = null;

$http.get(...).then ({
  if (deferred) {
    deferred.resolve(result);
    deferred = null;
  }
});

service.lastLapInfo = function(){
  if (no metrics) {
    deferred = $q.defer()
    return deferred;
  }
  else {
    return metrics;
  }
};
应该有效,这取决于您想要如何构建它


编辑:从注释中链接
$q

如果您没有立即获得数据,可以通过在返回值(
null
未定义的
[]
)中指示它来处理,或者在最初获取数据后存储并解析

大概是

var deferred = null;

$http.get(...).then ({
  if (deferred) {
    deferred.resolve(result);
    deferred = null;
  }
});

service.lastLapInfo = function(){
  if (no metrics) {
    deferred = $q.defer()
    return deferred;
  }
  else {
    return metrics;
  }
};
应该有效,这取决于您想要如何构建它


编辑:从注释中链接
$q

如果您没有立即获得数据,可以通过在返回值(
null
未定义的
[]
)中指示它来处理,或者在最初获取数据后存储并解析

大概是

var deferred = null;

$http.get(...).then ({
  if (deferred) {
    deferred.resolve(result);
    deferred = null;
  }
});

service.lastLapInfo = function(){
  if (no metrics) {
    deferred = $q.defer()
    return deferred;
  }
  else {
    return metrics;
  }
};
应该有效,这取决于您想要如何构建它


编辑:从注释中链接
$q

如果您没有立即获得数据,可以通过在返回值(
null
未定义的
[]
)中指示它来处理,或者在最初获取数据后存储并解析

大概是

var deferred = null;

$http.get(...).then ({
  if (deferred) {
    deferred.resolve(result);
    deferred = null;
  }
});

service.lastLapInfo = function(){
  if (no metrics) {
    deferred = $q.defer()
    return deferred;
  }
  else {
    return metrics;
  }
};
应该有效,这取决于您想要如何构建它


编辑:从注释链接
$q

这是承诺的典型用例

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

App.factory('metrics', function($http){
   var service;
   ...
   service.load = function () {
      return $http.get('data.csv');
   });
   return service;
});       
然后,在控制器中调用度量服务,并利用承诺:

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.
    });
});

这是承诺或angular的典型用例

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

App.factory('metrics', function($http){
   var service;
   ...
   service.load = function () {
      return $http.get('data.csv');
   });
   return service;
});       
然后,在控制器中调用度量服务,并利用承诺:

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.
    });
});

这是承诺或angular的典型用例

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

App.factory('metrics', function($http){
   var service;
   ...
   service.load = function () {
      return $http.get('data.csv');
   });
   return service;
});       
然后,在控制器中调用度量服务,并利用承诺:

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.
    });
});

这是承诺或angular的典型用例

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

App.factory('metrics', function($http){
   var service;
   ...
   service.load = function () {
      return $http.get('data.csv');
   });
   return service;
});       
然后,在控制器中调用度量服务,并利用承诺:

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.
    });
});


当你实际拥有数据时,在成功回调中做那些事情。当你实际拥有数据时,在成功回调中做那些事情。当你实际拥有数据时,在成功回调中做那些事情。当你实际拥有数据时,在成功回调中做那些事情。是的。我建议OP看看AngularJS$q是的。我建议OP to看看AngularJS$q是的。我建议OP看看AngularJS$q是的。我建议OP看看AngularJS$q非常酷!扩展这个功能,我如何将http请求设置为每秒轮询?我唯一能想到的是有另一个功能,例如update()在工厂中,以特定的间隔从使用工厂的每个控制器调用该函数。有更好的方法吗?您可以使用$interval service在服务中重复加载加载方法。这里将进一步解释:这里有一个示例。谢谢!这就是我需要的非常酷!扩展它我该怎么做设置http请求每秒轮询一次?我唯一能想到的是使用另一个函数,例如update()在工厂中,以特定的间隔从使用工厂的每个控制器调用该函数。有更好的方法吗?您可以使用$interval service在服务中重复加载加载方法。这里将进一步解释:这里有一个示例。谢谢!这就是我需要的非常酷!扩展它我该怎么做设置http请求每秒轮询一次?我唯一能想到的是使用另一个函数,例如update()在工厂中,以特定的间隔从使用工厂的每个控制器调用该函数。有更好的方法吗?您可以使用$interval service在服务中重复加载加载方法。这里将进一步解释:这里有一个示例。谢谢!这就是我需要的非常酷!扩展它我该怎么做设置http请求每秒轮询一次?我唯一能想到的是使用另一个函数,例如update()在工厂中,以特定的间隔从使用工厂的每个控制器调用该函数。有更好的方法吗?您可以使用$interval service在服务中重复加载加载方法。这里将进一步解释:这里有一个示例。谢谢!这就是我需要的