我正在使用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语句“等待”直到完成?打回来?答应吗?
答案 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;