$ save()。然后在Angular $资源上不等待服务响应

时间:2016-02-05 15:36:08

标签: javascript angularjs

我有一些控制器和一个函数调用来从REST WCF Web服务获取一些值:

fooBar.controller('fooCtrl',
            function fooCtrl($scope, $http, $resource) {
                $scope.someOnClickEvent = function () {
                GetSomething('a','b','c');
            }
        }
);

function GetSomething($scope, $resource, a, b, c) {
    var ServiceHandle = $resource('some/addr');
    var serviceHandle = new ServiceHandle();

    serviceHandle.a = a;
    serviceHandle.b = b;
    serviceHandle.c = c;

    serviceHandle.$save().then(function (result) {
        console.log('So response should be ready');
        $scope.result = result.ValueFromService;
    });
}

据我所知$save()返回promise .then中的promise和函数应该在服务器返回响应后立即调用。在我的情况下,它被称为imediately。

如果service返回true,我将显示一些弹出窗口,所以我需要在执行条件指令之前返回此值。

Angular的版本是1.4.9。

1 个答案:

答案 0 :(得分:2)

我已经分析了代码及其行为,显然我错了。也许我应该删除这个问题,但我相信它可以帮助别人理解类似的问题。

实际上在来自服务器的响应之后调用.then内的函数。可以使用Chrome的开发人员工具(即标签网络)验证它。

但是,如果在调用GetSomething函数之后我们想要访问$scope.result,我们就会犯一个大错误。只要$scope.result内的函数不会被执行,undefined将为.then。要使用从服务返回的值,我们必须在.then函数内或在它调用的函数中执行它。