AngularJs:$http同步调用
AngularJs: $http Synchronous call
我有一个API调用的服务,如下所示,
getValue: function(input) {
var deferred, url;
deferred = $q.defer();
url = "url";
$http.post(url, input).success(function(data, status, headers, config) {
return deferred.resolve({
success: true,
data: data,
status: status,
headers: headers,
config: config
});
}).error(function(data, status, headers, config) {
return deferred.resolve({
success: false,
data: data,
status: status,
headers: headers,
config: config
});
});
return deferred.promise;
}
但这是异步的。我如何将其转换为同步(我想让它等到我得到结果)?
不,这在Angular中是不可能的。
请参阅https://github.com/angular/angular.js/blob/master/src/ng/httpBackend.js#L51其中使用打开XMLHttpRequest
xhr.open(method, url, true);
xhr.open()
中的第三个参数可以设置为false
或true
,其中false是同步的,true是异步的。在Angular的情况下,它被硬编码为true
,因此所有传出的调用都是异步的。
使用.success()
回调等待异步调用返回,然后在那里执行您想做的任何操作。
根据评论中的建议,您当然也可以通过原始javascript、jQuery或任何其他支持同步调用的库进行调用,但我建议在异步角度调用中使用回调/延迟,因为同步调用是阻塞的,而阻塞是不好的。
相关文章:
- 同步调用,直到用户通过angular验证为访问者
- 如何使用javascript中的生成器模拟同步调用
- 通过同步调用检查用户是否存在
- Node.js同步调用passport本地注册
- 在同步调用之前先调用函数
- 对async函数进行同步调用
- 节点.js与 ASYC 瀑布模块同步调用
- 如何在节点/环回中同步调用 model.find 方法
- 异步进程上的同步调用
- 从 javascript 同步调用 Struts 2 操作
- 环回:对环回 API 进行同步调用
- JavaScript 同步调用
- Javascript方法同步调用,没有回调和$.ajax
- Javascript 同步调用与更新
- EXT-js如何同步调用Store
- AngularJs:$http同步调用
- phonecap对文件系统的同步调用
- javascript/nodejs:在大的、分块的数据集上同步调用一组类似的异步函数会导致内存泄漏
- Meteor同步调用函数
- 在nodejs中,是否有更好的设计模式来同步调用异步函数