2

我已经设置了一个 AngularJS resource

app.factory('gridData', function($resource) {
        var csrf = 'asdf';
        return $resource('/my/url/:expID', {expID:'@id'},{
                get: {method:'GET'},
                query: {method:'GET', isArray:true},
                save:{method:'POST', headers: {'X-CSRFToken' : csrf }}
          });
});

我将gridData资源注入我的控制器并使用它从服务器获取数据:

       gridData.query(function(result) {
            console.log("result is");
            console.log(result);
            $scope.data = result;
        });

这种方法在使用 AngularJS 1.3 时效果很好。该console.log(result)语句打印接收到的实际数据。

现在我尝试降级到AngularJS 1.2.11,我遇到了一个问题,因为console.log(result)打印出一个承诺,如图所示。因此设置为承诺,但我实际上只需要在实际数据可用时设置 $scope.data 。$scope.data

这是因为在 1.3 和 1.2 之间的某些版本中,Angular 已经引入了 Promise。知道如何处理这种情况/正确处理承诺吗?

4

1 回答 1

0

查看$q 服务文档中标题为“The Promise API”的部分。您还可以查看有关 Angular Promise 的视频。

您需要了解的主要方法是.then. 以下是使用此方法重构代码的方法:

gridData.query(function(promise) {
            promise.then(function (result) {
              console.log("result is");
              console.log(result);
              $scope.data = result;
            });
        });

此示例可能更简洁,但它仅用于说明目的。希望有帮助。

于 2014-03-13T23:23:53.907 回答