Angularjs轮询API以检查JSON中的空数组

时间:2014-08-31 21:31:13

标签: javascript arrays json angularjs

我试图创建一个轮询API的服务,并检查响应是否有空的arrary。如果是这样,我希望它每隔一秒检查一次,直到响应中的数组被填满。对于instace,如果数组为空,则JSON将返回:

{
choices: [ ]
}

为了设置它,我已经创建了这样的服务。问题是data.response.choices.length似乎是未定义的,我不是很确定如何检查数组是否为空。其余代码似乎工作正常。想法?

angular.module('help')

  .factory('Poller', function($http, $timeout) {
    var data = { response: {}, calls: 0 };
    var poller = function() {
      if (data.response.choices.length === 0) {
        $http.get('menu.json').then(function(r) {
          data.response = r.data;
          data.calls++;
          $timeout(poller, 1000);
        });
        console.log('success');
      } else {
        $http.get('menu.json').then(function(r) {
          data.response = r.data;
        });
        console.log('damnit');
      }
    };
    poller();

    return {
      data: data
    };
  });

2 个答案:

答案 0 :(得分:1)

data.response设置为空对象,因此第一次调用poller时,data.response.choices保证为undefined

我认为代码可以简化为......

angular.module('help')

  .factory('Poller', function($http, $timeout) {
    var data = { response: {}, calls: 0 };
    var poller = function() {
      $http.get('menu.json').then(function(r) {
        data.response = r.data;
        data.calls++;
        if (r.data.choices.length === 0) {
          $timeout(poller, 1000);
        }
      });
    };
    poller();

    return {
      data: data
    };
  });

答案 1 :(得分:0)

您可以使用:

<!-- Image Gallery  -->
<div class="gallery" ng-show="product.images.length">