首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用AngularJS $http同步调用

如何使用AngularJS $http同步调用
EN

Stack Overflow用户
提问于 2012-10-26 21:45:46
回答 5查看 202.3K关注 0票数 132

有没有办法用AngularJS进行同步调用?

AngularJS文档对于弄清楚一些基本的东西来说并不是非常明确或广泛。

在服务上:

代码语言:javascript
复制
myService.getByID = function (id) {
    var retval = null;

    $http({
        url: "/CO/api/products/" + id,
        method: "GET"
    }).success(function (data, status, headers, config) {

        retval = data.Data;

    });

    return retval;
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-10-26 22:00:52

目前还没有。如果使用look at the source code (from this point in time Oct 2012),您将看到对XHR open的调用实际上是硬编码为异步的(第三个参数为true):

代码语言:javascript
复制
 xhr.open(method, url, true);

您需要编写自己的服务来执行同步调用。通常情况下,这不是您通常想要做的事情,因为JavaScript执行的性质决定了您最终会阻塞其他所有东西。

..。但是..。如果真的需要屏蔽其他所有东西,也许你应该考虑一下promises和$q service。它允许您等待一组异步操作完成,然后在它们全部完成后执行某些操作。我不知道你的用例是什么,但这可能值得一看。

除此之外,如果您打算使用自己的方法,请参阅有关如何进行同步和异步ajax调用can be found here的更多信息。

我希望这能对你有所帮助。

票数 114
EN

Stack Overflow用户

发布于 2014-06-26 16:57:26

我曾与一家工厂合作,集成了谷歌地图自动完成和承诺做出的​​,我希望你服务。

http://jsfiddle.net/the_pianist2/vL9nkfe3/1/

您只需通过此请求将autocompleteService替换为出厂前的$ http incuida。

代码语言:javascript
复制
app.factory('Autocomplete', function($q, $http) {

和$ http请求

代码语言:javascript
复制
 var deferred = $q.defer();
 $http.get('urlExample').
success(function(data, status, headers, config) {
     deferred.resolve(data);
}).
error(function(data, status, headers, config) {
     deferred.reject(status);
});
 return deferred.promise;

<div ng-app="myApp">
  <div ng-controller="myController">
  <input type="text" ng-model="search"></input>
  <div class="bs-example">
     <table class="table" >
        <thead>
           <tr>
              <th>#</th>
              <th>Description</th>
           </tr>
        </thead>
        <tbody>
           <tr ng-repeat="direction in directions">
              <td>{{$index}}</td>
              <td>{{direction.description}}</td>
           </tr>
        </tbody>
     </table>
  </div>

'use strict';
 var app = angular.module('myApp', []);

  app.factory('Autocomplete', function($q) {
    var get = function(search) {
    var deferred = $q.defer();
    var autocompleteService = new google.maps.places.AutocompleteService();
    autocompleteService.getPlacePredictions({
        input: search,
        types: ['geocode'],
        componentRestrictions: {
            country: 'ES'
        }
    }, function(predictions, status) {
        if (status == google.maps.places.PlacesServiceStatus.OK) {
            deferred.resolve(predictions);
        } else {
            deferred.reject(status);
        }
    });
    return deferred.promise;
};

return {
    get: get
};
});

app.controller('myController', function($scope, Autocomplete) {
$scope.$watch('search', function(newValue, oldValue) {
    var promesa = Autocomplete.get(newValue);
    promesa.then(function(value) {
        $scope.directions = value;
    }, function(reason) {
        $scope.error = reason;
    });
 });

});

问题本身是在以下方面提出的:

代码语言:javascript
复制
deferred.resolve(varResult); 

当你做得很好,并且你的请求:

代码语言:javascript
复制
deferred.reject(error); 

当出现错误时,然后:

代码语言:javascript
复制
return deferred.promise;
票数 12
EN

Stack Overflow用户

发布于 2015-09-04 18:37:44

代码语言:javascript
复制
var EmployeeController = ["$scope", "EmployeeService",
        function ($scope, EmployeeService) {
            $scope.Employee = {};
            $scope.Save = function (Employee) {                
                if ($scope.EmployeeForm.$valid) {
                    EmployeeService
                        .Save(Employee)
                        .then(function (response) {
                            if (response.HasError) {
                                $scope.HasError = response.HasError;
                                $scope.ErrorMessage = response.ResponseMessage;
                            } else {

                            }
                        })
                        .catch(function (response) {

                        });
                }
            }
        }]


var EmployeeService = ["$http", "$q",
            function ($http, $q) {
                var self = this;

                self.Save = function (employee) {
                    var deferred = $q.defer();                
                    $http
                        .post("/api/EmployeeApi/Create", angular.toJson(employee))
                        .success(function (response, status, headers, config) {
                            deferred.resolve(response, status, headers, config);
                        })
                        .error(function (response, status, headers, config) {
                            deferred.reject(response, status, headers, config);
                        });

                    return deferred.promise;
                };
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13088153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档