在将请求发送到服务器之前,是否可以让拦截器等待某个事件?
以下是拦截器的代码:
(function() {
"use strict";
angular.module("fuse").config(config);
/** @ngInject */
function config($httpProvider, $provide) {
$provide.factory("httpInterceptor", function($q, $rootScope) {
return {
request: function(config) {
// I need to wait for some event, read its argument and add this argument to the headers
return config || $q.when(config); // Only return after handling the event
},
response: function(response) {
console.log("Data Count: " + response.data.length);
return response || $q.when(response);
}
};
});
$httpProvider.interceptors.push("httpInterceptor");
}
})();
正如您所看到的,在返回配置对象之前,我想处理一些包含我需要添加到标题的其他数据的事件。
它有可能吗?
答案 0 :(得分:1)
是的,您可以这样做,返回您的承诺var deferred = $q.defer();
,而不是异步方法完成后,您可以解析更新后的配置:
'request': function(config) {
var deferred = $q.defer();
someAsyncService.doAsyncOperation().then(function() {
// Asynchronous operation succeeded, modify config accordingly
...
deferred.resolve(config);
}, function() {
// Asynchronous operation failed, modify config accordingly
...
deferred.resolve(config);
});
return deferred.promise;
}
中阅读更多内容