我正在开发一个AngularJS应用程序。
我尝试编写一个服务方法,可以定期从HTTP请求中自动重新加载某些内容,并通知调用该方法的控制器。
所以我搜索使用AngularJS的promse API并使用$ timeout服务,但是当方法不是异步运行时我无法返回promise ...
所以在这里,承诺永远不会归还,我理解为什么,但我不知道做我想做的正确模式是什么。
angular.module('myModule')
.factory('myService', [
'$timeout',
'$q',
'$doMyHttpRequest',
function($timeout, $q, $doMyHttpRequest){
var d = $q.defer();
return function(){
autoRefresh = function(){
$timeout(function(){
$doMyHttpRequest(function(){
d.notify({ // notify the update success
updated: true
});
},function(){
d.notify({ // notify the update error
updated: false
});
});
this.autoRefresh(); // refresh again in 60 seconds
},60000);
};
this.autoRefresh();
return d.promise;
}
}])
.controller('myCtrl', ['myService', function(myService){
myService().autoRefresh().then(function(){ // never reached because promise is never returned
// do my stuff when succeed
},function(){ // never reached because promise is never returned
// do my stuff when error
});
}])
;
答案 0 :(得分:2)
请参见此处:http://jsbin.com/wiveli/1/edit
app.controller('firstCtrl', function($timeout, doMyHttpRequest){
function onSucess() {
console.log("sucess");
autoRefresh();
};
function onError() {
console.log("error");
autoRefresh();
}
function autoRefresh(){
$timeout(function(){
doMyHttpRequest.getData().then(onSucess, onError);
},1000);
}
autoRefresh();
});