如何使用odataresources.js库在AngularJS应用程序中正确解析JS承诺

时间:2016-04-01 16:23:06

标签: javascript angularjs

在我的Angular应用程序中,我使用odatasources.js库从公共OData源获取数据。 以下调用返回一个我希望能够解析的promise,以便访问此promise所返回的实际数据:

var myModule = angular.module("MyModule",['ODataResources']);
myModule.controller("MyController",function($scope,$odataresource){
    $scope.results = 
        $odataresource("http://services.odata.org/V4/Northwind/Northwind.svc/Products")
        .odata()
        .filter('UnitPrice','>',10)
        .filter('Discontinued',true)
        .orderBy('UnitsInStock','asc')
        .expand('Category')
        .query();
});

我想做的(对于初学者),是迭代返回的数据,并简单地将其登录到控制台:

angular.forEach($scope.results, function(value, key) {
        console.log(key + '   ' + value);
    });

现在看来,$ scope.results是一个未解决的承诺。

解决此承诺的正确语法是什么,并迭代实际返回的数据?

这是我目前的小提琴:

http://jsfiddle.net/eugene_goldberg/gmqvq9fx/1/

1 个答案:

答案 0 :(得分:1)

您可以通过将回调传递给query()方法来完成此操作。 Fiddle

var myModule = angular.module("MyModule",['ODataResources']);
myModule.controller("MyController",function($scope,$odataresource){
    $scope.results = 
        $odataresource("http://services.odata.org/V4/Northwind/Northwind.svc/Products")
        .odata()
        .filter('UnitPrice','>',10)
        .filter('Discontinued',true)
        .orderBy('UnitsInStock','asc')
        .expand('Category')
        .query(function(data) {
          console.log('success');
          console.log(data);
          angular.forEach(data, function(value, key) {
            console.log(key + '   ' + value);
          });
        }, function(err) {
            console.log('There was an error: ', err);
        });
});
相关问题