下面是我有一个 asyncService 的代码,它生成一个随机数并将一个promise对象返回给调用控制器。我创建了一个延迟对象,如果生成的随机数是> 5,则解析该对象如果生成的数字<5,则拒绝。 每当我运行此代码时,它总是得到相同的数字。 下面是代码。请参阅控制台以获取消息
angular.module("promisesModule",[])
.controller('MainCtrl',function(asyncService){
this.startAsync = function(){
asyncService.getRand().then(function(no){
console.log("success and no is "+no);
},function(no){
console.log("failed and no is "+no);
})
}
})
.service('asyncService',function($q){
var deferred = $q.defer();
this.getRand = function(){
setTimeout(function(){
var no = Math.floor((Math.random()*10)+1);
if(no >5){
deferred.resolve(no);
} else {
deferred.reject(no);
}
},2000);
return deferred.promise;
}
})
答案 0 :(得分:4)
您需要将deferred
变量的声明移到getRand
函数中。否则,每次都会返回相同的承诺,这就是你所看到的。
.service('asyncService',function($q){
this.getRand = function(){
var deferred = $q.defer();
setTimeout(function(){
var no = Math.floor((Math.random()*10)+1);
if(no >5){
deferred.resolve(no);
} else {
deferred.reject(no);
}
},2000);
return deferred.promise;
}
})