Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJs:$http同步调用_Javascript_Angularjs_Synchronous - Fatal编程技术网

Javascript AngularJs:$http同步调用

Javascript AngularJs:$http同步调用,javascript,angularjs,synchronous,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({

我有一个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中是不可能的

查看XMLHttpRequest的打开位置

xhr.open(method, url, true);
xhr.open()
中的第三个参数可以设置为
false
true
,其中false是同步的,true是异步的。在角度情况下,它被硬编码为
true
,因此所有传出呼叫都是异步的

使用
.success()
回调等待异步调用返回,然后执行您想在那里执行的任何操作


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

这就是承诺的目的。使用函数返回的承诺执行操作。e、 g
defered.promise
返回
。然后(函数(){/*您的操作*/})
。或者,在您的情况下(因为它基本上解析为http响应,请在post fn中执行您的操作)。我认为不可能进行同步,但您使用的是promise,它允许您控制它,你可以告诉你的应用程序等待,直到它将解决/拒绝可能的重复。我在angular服务中使用$http.get请求响应中的数据,我很难做到这一点,因为响应需要一些时间,并且由于异步性质,我的代码用于调用该服务的代码。我没有使用任何阻塞,但我在application.html中传递了数据,并在调用服务之前从中提取数据。我不知道这是否是正确的方法,但这似乎有效。