将 $http.get 转换为 Restangular

Converting $http.get to Restangular

好的,对于一个实习项目,我正在尝试为 REST 创建一个简单的客户端 API。当前客户端正在使用常规 angularJS,但我需要为此使用 Restangular。

我一直在四处寻找,尝试了很多东西,但没有什么能帮助我做我想做的,或者理解需要发生什么。

这是需要转换成 Restangular 的代码片段

$http.get('/rest/programarticle/', {
  'format': 'json'
}).success(function(data, status, headers, config) {
  $scope.articles = angular.articles = data.results;
});

这会获取 JSON 包含一些元数据的数据,以及一个数组(结果):

{
    "count": 3,
    "next": null,
    "previous": null,
    "results": [
        {
            "id": 100,
            "catalog": 7,
            "catalog_alias": "placeHolder",
            "program": 7,
            "name": "placeHolder"
        },
        {
            "id": 92,
            "catalog": 6,
            "catalog_alias": "placeHolder",
            "program": 6,
            "name": "placeHolder"
        },
        {
            "id": 84,
            "catalog": 5,
            "catalog_alias": "string",
            "program": 5,
            "name": "placeHolder"
        }
    ]
}

我的 baseUrl 配置正确,我试过了:

var testArticles = Restangular.all('programarticle').getList();
console.log(testArticles);

使用以下 ResponseInterceptor:

RestangularProvider.addResponseInterceptor(function(data, operation, what, url, response, deferred) {
    var extractedData;
    if (operation === "getList") {
        extractedData = data.results;
        extractedData.count = data.count;
        extractedData.next = data.next;
        extractedData.previous = data.previous;
    } else {
        extractedData = data.data;
    }
    return extractedData;
});

但这仍然会导致我无法在控制台中使用:

Promise {$$state: Object, restangularCollection: true, $object: Array[0]}

打开后显示如下:

$$state: Object
$object: Array[7]
call: wrapper()
get: wrapper()
push: wrapper()
restangularCollection: true
__proto__: Promise

它确实显示了一个数组($object),但我无法使用

访问它
console.log(testArticles.$object);

我应该使用 .get() 而不是 getList() 吗?如果是这样,我该如何正确使用它?

谢谢你的宝贵时间,还请多多指教,我还是初学者

restangular return 中的 get/getList 函数实际上是 Promises,而不是 JSON 对象自己检索的对象。 Promises 是一种使用更易于管理的接口来抽象异步调用的方法。它们代表预期的未来结果。

你需要知道的是,要获得 Promise 的实际结果,你必须使用 then 函数添加回调,如下所示:

Restangular.all('programarticle').getList().then(function (articles) {
    $scope.articles = articles;
});

阅读更多关于承诺的信息here