我正在为使用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;
}
}
}
});拦截器函数应该丰富响应中的数据,但在完成异步操作之前返回未修改的实例(正如预期的那样,因为它是异步的.)。
有什么好方法可以异步地丰富数据并使返回语句“等待”直到完成?回调?你保证?
发布于 2018-11-22 10:32:09
在寻找正确的问题之后,我找到了一篇解决了我的问题的文章:
有时,需要在拦截器内部进行一些异步操作。幸运的是,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;
}
}
}
});发布于 2018-11-19 16:21:48
使用o样例:https://docs.angularjs.org/api/ng/service/http#$http-参数;
自有的"transformRequest“éuma melhor op o;
https://stackoverflow.com/questions/53378059
复制相似问题