$ http.transformRequest包含异步函数的结果

时间:2013-05-20 16:22:36

标签: asynchronous angularjs cors

我有一个角度应用程序,它使用$ http服务从远程服务器获取数据。在某些情况下,我需要为每个请求附加一个自定义标头值,我想使用facilities provided by the framework来完成此任务。

出于安全原因,要添加的标头值是在角度应用程序的Web服务器上计算的,这意味着requestTransform必须首先向应用程序Web服务器发出请求以获取标头值并将其添加到$ http请求中从远程服务器获取数据。

是否可以将requestTransform用于此任务?或者,需要在服务中包含我的数据获取调用,该服务在对远程服务器进行$ http调用之前从应用程序Web服务器获取标头值。

2 个答案:

答案 0 :(得分:2)

不,转换请求/响应函数是同步的,因此不能用于您的特定情况。幸运的是,请求拦截器最近被添加到AngularJS的1.1.x分支。这些拦截器是基于承诺的,因此您可以在实际调用之前使用它们进行异步处理。

http://code.angularjs.org/1.1.4/docs/api/ng.$http

的“拦截器”部分中的更多信息

答案 1 :(得分:1)

如果您正在全局设置Ajax转换函数(通过$httpProvider.defaults.transformRequest)并且您的转换函数也使用$ http来执行预检请求,那么您可能会陷入无限循环,因为每个预检请求将以递归方式调用另一个预检请求。

因此,唯一的选择是仅在您的特定$ http服务上设置请求转换功能。

现在,因为trnf。函数同步执行(参见https://github.com/angular/angular.js/blob/master/src/ng/http.js#L671)您可能希望确保您的预检请求也同步执行,但由于您无法使用$ http执行此操作,您唯一的选择是使用其他形式的预检ajax请求(使用jQuery.ajax()或本机使用普通JS)。