$$。transformRequest,带有异步函数的结果

问题描述 投票:0回答:2

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

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

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

angularjs asynchronous
2个回答
2
投票

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

http://code.angularjs.org/1.1.4/docs/api/ng.$http的“拦截器”部分中的更多信息


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)。

© www.soinside.com 2019 - 2024. All rights reserved.