带有异步响应拦截器的ngResource

时间:2018-11-19 15:39:59

标签: angularjs asynchronous interceptor ngresource

我正在使用ngResource编写API调用的响应拦截器,如下所示:

var Thing = $resource('/api/things/:id', {id: '@id'}, {
  queryAll: {
    method: 'GET',
    interceptor: {
      response: function(response) {
        var instance = response.resource;

        doAsyncStuffHere(instance.data);

        return instance;
      }
    }
  }
});

拦截器函数应丰富响应中的数据,但在异步处理完成之前返回未修改的实例(如预期的那样,因为它是异步的...)。

有没有一种好的方法,可以异步充实数据并使return语句“等待”直到完成?打回来?答应吗?

2 个答案:

答案 0 :(得分:0)

在搜索了正确的问题之后,我找到了解决我的问题的文章:

  

有时,需要在拦截器内进行一些异步操作。幸运的是,AngularJS允许我们返回一个承诺,该承诺将在以后解决。在请求拦截器的情况下,这将延迟请求的发送;在响应拦截器的情况下,这将延迟响应的解决。

发件人:http://www.webdeveasy.com/interceptors-in-angularjs-and-useful-examples/

这就是我的代码现在看起来像什么并且像魅惑一样工作。

var Thing = $resource('/api/things/:id', {id: '@id'}, {
  queryAll: {
    method: 'GET',
    interceptor: {
      response: function(response) {
        var instance  = response.resource,
            _deferred = $q.defer();

        doAsyncStuffHere(instance.data).then(function() {
            _deferred.resolve(instance);
        });

        return deferred.promise;
      }
    }
  }
});

答案 1 :(得分:-2)

使用示例: https://docs.angularjs.org/api/ng/service/http# $ http参数;

专有的“ transformRequest”éuma melhoropção;