javascript - AngularJs: $http 同步调用

标签 javascript angularjs synchronous

我有一个 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()中的第三个参数可以设置为falsetrue,其中false为同步,true为异步.在 Angular 的情况下,它被硬编码为 true,因此所有传出调用都是异步的。

使用 .success() 回调等待异步调用返回,然后在那里做任何你想做的事。

根据评论中的建议,您当然也可以通过原始 javascript、jQuery 或任何其他支持同步调用的库进行调用,但我建议在异步 Angular 调用中使用回调/延迟,因为同步调用阻塞和阻塞是坏的。

关于javascript - AngularJs: $http 同步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26603532/

相关文章:

javascript - 在 photoswipe 图像上隐藏导航栏( Bootstrap )单击

javascript - 如何保护我的表单输入字段数据不被用户更改到控制台?

javascript - 如何使用 jsZip 作为驻留在同一服务器上的图像 url

javascript - 在运行时以编程方式引用 JavaScript 文件

angularjs - Angular js Controller 内的关键字 "this"

javascript - 从 Controller 调用其他 Controller 内的函数

java - 使用具有返回值的同步方法包装一系列异步调用

swift - 如何在异步 api 调用后执行同步 api 调用

javascript - div 在另一个动态 div 的底部

node.js - 在 Node.js 中使用 Promise 会使 Node 同步吗?