javaScript中的异步数据检索

javaScript中的异步数据检索,javascript,angularjs,asynchronous,restangular,angular-local-storage,Javascript,Angularjs,Asynchronous,Restangular,Angular Local Storage,我在那里 在Restangular和Angular本地存储的帮助下,我正在构建Angular.js应用程序。我需要从RESTFull服务服务器检索一些数据,并将其分配给$scope变量 我想知道,在将数据加载到我的视图(html)之前,如何等待所有数据加载 以下是我迄今为止所做的工作: app.controller('InventoryController', function($scope, inventoryService) { $scop

我在那里

在Restangular和Angular本地存储的帮助下,我正在构建Angular.js应用程序。我需要从RESTFull服务服务器检索一些数据,并将其分配给$scope变量

我想知道,在将数据加载到我的视图(html)之前,如何等待所有数据加载

以下是我迄今为止所做的工作:

app.controller('InventoryController', function($scope, inventoryService) {                        
  $scope.productList = inventoryService.getProduces();
  console.log($scope.productList); // At that point, $scope.productList is null
});

app.service('inventoryService', function(entityService, browserStorageService) {
  entityService.allUrl('product', entityService.getBaseUrl).getList().then(function(data){
    console.log(data); // The data variable is not null here.
    browserStorageService.set('producList', data);
  });

  this.getProduces = function() {
    return browserStorageService.get('producList');
  };
});

app.service('browserStorageService', function(localStorageService) {
  localStorageService.clearAll();
  return localStorageService;
});

app.service('entityService', function(Restangular) {
  Restangular.setBaseUrl('http://localhost:8000/rest/');
  return Restangular;
});
我对JavaScript的异步特性一点也不满意,我确信它非常简单,但我不知道我能做些什么来纠正这种情况

数据不会在第一次调用控制器时加载到页面中,但是当我再次调用它而不重新加载应用程序时,数据就在那里


谢谢你的帮助

而不是调用
inventoryService.getProducts()在控制器中,您必须使用来自服务的数据在应用程序的配置部分中创建resolve对象。之后,您可以访问传递给控制器的数据

app.config(function($routeProvider){
    $routeProvider
    .when('/',{
        template:'',
        controller: 'InventoryController',
        resolve:{
            products: function(inventoryService) {
               return inventoryService.getProduces();
            }
        }
    });
});

app.controller('InventoryController', function($scope, products) {                        
    $scope.productList = products;
    console.log($scope.productList);
});

模板路径应该根据您的应用程序结构进行设置。

您看到这个问题了吗?看起来很相似谢谢,我开始喜欢AngularJs了,所以聪明的呵呵,您让我走上了正确的方向,但现在的问题是,InventoryService在何处调用browserStorageService以获取方法getProduct()中的ProduceList;调用是异步的,所以它返回一个未分配的变量给,同样的问题,但在流程的后面一点!我认为您的响应很好,因为这是正确的方法,如果我不使用browserStorageService并直接从entityService返回值,它会正常工作。要在缓存中获取请求的对象,我会切换到angular cached resource,它能很好地工作,因为我的应用程序不会始终访问服务器(冷冻柜中的库存:)。