Angularjs $q服务承诺返回相同的数据
下面是代码,其中我有一个asyncService,它生成一个随机数并向调用控制器返回一个承诺对象。我创建了一个延迟对象,如果生成的随机数大于5,它将解析,如果生成的数则拒绝。您需要将Angularjs $q服务承诺返回相同的数据,angularjs,Angularjs,下面是代码,其中我有一个asyncService,它生成一个随机数并向调用控制器返回一个承诺对象。我创建了一个延迟对象,如果生成的随机数大于5,它将解析,如果生成的数则拒绝。您需要将延迟变量的声明移动到getRand函数。否则,每次都会返回相同的承诺,这就是你所看到的 .service('asyncService',function($q){ this.getRand = function(){ var deferred = $q.defer(); se
延迟变量的声明移动到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;
}
})
您需要将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;
}
})
@斯克尼罗我最初对你的小提琴进行了升级,但它只能“证明”它是有效的,因为它每次都完全重新运行整个小提琴。这与OP正在经历的行为不一致,下面Anid的回答正确地解决了问题。啊,是的,很好的观察,我确实忽略了这一点@DavidL@scniro我最初对你的小提琴进行了升级,但它只能“证明”它是有效的,因为它每次都完全重新运行整个小提琴。这与OP正在经历的行为不一致,下面Anid的回答正确地解决了问题。啊,是的,很好的观察结果,我确实忽略了@davidl,非常感谢……完全忽略了这一点……解决方案有效!非常感谢…完全错过了…解决方案有效!