AngularJS 1.1.5 $ resource.get没有从setTimeout创建XHR请求

时间:2013-08-07 15:03:01

标签: http angularjs settimeout

我在Goular论坛上为AngularJS提出了这个问题,直到现在还没有听说过。有人可以帮我理解这里发生了什么吗?

我正在尝试定期刷新资源,但似乎无法正常工作。我已经跟踪它,直到从$ http服务获得了promise,但是当在setTimeout中调用方法时,从未创建并触发XHR请求。但是,如果我在没有setTimeout的情况下做同样的事情似乎一切正常。

工作JSFiddle:http://jsfiddle.net/hponnu/Z62QN/2/

window.root_module = angular.module("MyApp", ['ngResource']);
function MainController($scope, $resource) {
    $scope.buttonClick = function () {
        var res = $resource("http://www.google.com");
        res.get({}, function (response) {
            alert("response");
        }, function (err) {
            alert("error");
        });
    }
}

破碎的JSFiddle:http://jsfiddle.net/hponnu/H8aEt/10/

window.root_module = angular.module("MyApp", ['ngResource']);
window.count = 0;
function MainController($scope, $resource) {
    $scope.buttonClick = function () {
       setTimeout(function () {
            alert("timeout: " + window.count);
            var res = $resource("http://www.google.com");
            res.get({},
                function (response) {
                    alert("response: " + window.count);
                    window.count++;
                }, function (err) {
                    alert("error: " + window.count);
                    window.count++;
                });
       }, 1000);
    }

}

正如您将在破碎的jsfiddle中清楚地看到,除非再次单击按钮触发单击事件,否则不会针对第一个请求触发错误警报。我已经开始从AngularJS 1.1.4中注意到这一点

有任何想法/建议吗?

PS:https://groups.google.com/forum/#!topic/angular/t28mazamT0E是Google网上论坛帖子的链接。

1 个答案:

答案 0 :(得分:1)

您应该始终使用Angularjs的$timeout代替setTimeout()

function MainController($scope, $resource, $timeout) {
    $scope.buttonClick = function () {
        $timeout(function () {
            ...
        }, 1000);
    }
}