0

我在 AngularJS 的谷歌论坛上问过这个问题,直到现在才听说过。有人可以帮我理解这里发生了什么吗?

我正在尝试定期刷新资源,但它似乎不起作用。我一直在跟踪它,直到从 $http 服务获得了承诺,但是在 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 群组线程的链接。

4

1 回答 1

1

您应该始终使用 Angularjs 的$timeout而不是setTimeout().

function MainController($scope, $resource, $timeout) {
    $scope.buttonClick = function () {
        $timeout(function () {
            ...
        }, 1000);
    }
}
于 2013-08-07T15:12:08.460 回答