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

时间:2015-09-23 20:52:18

标签: angularjs

下面是我有一个 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;
    }
})

1 个答案:

答案 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;
    }
})