AngularJs:$http同步调用

AngularJs: $http Synchronous call

本文关键字:同步 调用 http AngularJs      更新时间:2023-09-26

我有一个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或任何其他支持同步调用的库进行调用,但我建议在异步角度调用中使用回调/延迟,因为同步调用是阻塞的,而阻塞是不好的。