Javascript 如何每秒从服务发送$http.get请求

Javascript 如何每秒从服务发送$http.get请求,javascript,jquery,angularjs,angular-services,Javascript,Jquery,Angularjs,Angular Services,我有一个angular应用程序,它有$htto.get请求。它工作正常,但我需要每隔一秒钟执行一次,以获得新数据 服务: angular.module('adf.widget.liveCharts') .service('liveChartService', function($q, $http, $timeout){ return { getJSON: function(path){ var deferred = $q.defer();

我有一个angular应用程序,它有$htto.get请求。它工作正常,但我需要每隔一秒钟执行一次,以获得新数据

服务:

angular.module('adf.widget.liveCharts')
  .service('liveChartService', function($q, $http, $timeout){

    return {
      getJSON: function(path){
        var deferred = $q.defer();
        var url = 'http://orbit5.ds.cs.umu.se:8888/vrio/blk';
        $http.get(url)
          .success(function(data){
            if (data){
              deferred.resolve(data);
              } else {
                deferred.reject(data.data.message);
              }
            })
          .error(function(){
            deferred.reject();
          });
        return deferred.promise;
      }
  }
  });
在此处添加控制器以供参考

angular.module('adf.widget.liveCharts', ['adf.provider', 'highcharts-ng'])
  .config(function(dashboardProvider){
    // template object for github widgets
    var widget = {
      templateUrl: '{widgetsPath}/liveCharts/src/view.html',
      reload: true,
      resolve: {
        /* @ngInject */
        paths: function(liveChartService, config, $timeout){
          if (config.path){
            return liveChartService.getJSON(config.path);
          }

        }
      },
      edit: {
        templateUrl: '{widgetsPath}/liveCharts/src/edit.html'
      }
    };

在您的控制器中,您可以这样做

$interval(function(){

    liveChartService.getJSON().then(function(data){

        //$scope.data = data;
    })
},1000);

在您的控制器中,您可以这样做

$interval(function(){

    liveChartService.getJSON().then(function(data){

        //$scope.data = data;
    })
},1000);

使用$interval可以帮助您-它与vanilla js中的setInterval非常相似-基本上这就是结构

$interval(fn,延迟,[count],[invokeApply],[Pass])

最后3个参数是可选的,但您需要以毫秒为单位传递函数+延迟时间,您可以使用其中的任何函数,或调用返回另一个函数的函数:

$interval(function(){
    liveChartService.getJSON().then(function(data){
        //some codes here
    })
},1000);

希望它能帮助您…

使用$interval可以帮助您-它与vanilla js中的setInterval非常相似-基本上就是这样的结构

$interval(fn,延迟,[count],[invokeApply],[Pass])

最后3个参数是可选的,但您需要以毫秒为单位传递函数+延迟时间,您可以使用其中的任何函数,或调用返回另一个函数的函数:

$interval(function(){
    liveChartService.getJSON().then(function(data){
        //some codes here
    })
},1000);

希望它能帮助您……

$timeout有什么问题吗?如果您需要频繁更新数据,您可能应该查看WebSocket。如果我添加$timeout(函数(路径)…,1000),那么我会收到一个错误liveChartService。getJSON不是我控制器中的函数。。此外,在上面添加控制器这不是创建角度的目的。我强烈建议您不要使用任何黑客/变通方法来获取这样的数据。搜索SingleR,它将更适合您的需要。您可以添加一个指向SingleR的链接$timeout有什么问题吗?如果您需要频繁更新数据,您可能应该查看WebSocket。如果我添加$timeout(函数(路径)…,1000),我不知道如何正确地使用此代码实现超时然后我得到一个错误liveChartService.getJSON不是我控制器中的函数。。此外,在上面添加控制器这不是创建角度的目的。我强烈建议您不要使用任何黑客/变通方法来获取这样的数据。搜索SingleR,它将更适合您的需要。您可以添加SingleR的链接吗