我在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网上论坛帖子的链接。
答案 0 :(得分:1)
您应该始终使用Angularjs的$timeout代替setTimeout()
。
function MainController($scope, $resource, $timeout) {
$scope.buttonClick = function () {
$timeout(function () {
...
}, 1000);
}
}