为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用AngularJS进行$ http同步调用

如何使用AngularJS进行$ http同步调用

饮歌长啸 2019-07-24 19:11:17
如何使用AngularJS进行$ http同步调用对不起,我的新手问题,但AngularJS文档不是非常明确或广泛,以找出一些基本的东西。有没有办法与AngularJS进行同步调用?在服务上: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;}
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

不是现在。如果查看源代码(从2012年10月的时间点开始),您将看到对XHR open的调用实际上是硬编码为异步(第三个参数为true):

 xhr.open(method, url, true);

您需要编写自己的同步调用服务。一般情况下,由于JavaScript执行的性质,您通常不会想要这样做,因此最终会阻止其他所有内容。

...但是......如果实际上需要阻止其他所有内容,也许你应该查看promises和$ q服务。它允许您等待一组异步操作完成,然后在它们全部完成后执行。我不知道你的用例是什么,但这可能值得一看。

除此之外,如果您打算自己动手,可以在此处找到有关如何进行同步和异步ajax调用的更多信息。

我希望这是有帮助的。


查看完整回答
反对 回复 2019-07-24
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

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;
                };


查看完整回答
反对 回复 2019-07-24
  • 3 回答
  • 0 关注
  • 2347 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信