Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs $q服务承诺返回相同的数据_Angularjs - Fatal编程技术网

Angularjs $q服务承诺返回相同的数据

Angularjs $q服务承诺返回相同的数据,angularjs,Angularjs,下面是代码,其中我有一个asyncService,它生成一个随机数并向调用控制器返回一个承诺对象。我创建了一个延迟对象,如果生成的随机数大于5,它将解析,如果生成的数则拒绝。您需要将延迟变量的声明移动到getRand函数。否则,每次都会返回相同的承诺,这就是你所看到的 .service('asyncService',function($q){ this.getRand = function(){ var deferred = $q.defer(); se

下面是代码,其中我有一个asyncService,它生成一个随机数并向调用控制器返回一个承诺对象。我创建了一个延迟对象,如果生成的随机数大于5,它将解析,如果生成的数则拒绝。您需要将
延迟
变量的声明移动到
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,非常感谢……完全忽略了这一点……解决方案有效!非常感谢…完全错过了…解决方案有效!