javascript - angularjs setinterval定时器问题。
伊谢尔伦
伊谢尔伦 2017-04-11 12:49:19
0
0
202
  1. angular 源码如下:

.controller('qrcodeCtrl',function($scope,qrcodeservice,statusservice){
            $scope.init = function(){
                $scope.getQrcodes();
            }
            $scope.getQrcodes = function(){
                qrcodeservice.getQrcodes()
                .then(function(res){
                    $scope.qrcodes = qrcodeservice.qrcodeList;
                    $scope.loginstatus = [];
                    var logininfo = [];    //初始化定时器数组
                    for(var i = 0; i < $scope.qrcodes.length; i++){
                        logininfo[i] = self.setInterval(getloginfo,10000,i);
                    }
                    function getloginfo(i){
                        uuid = $scope.qrcodes[i];
                        statusservice.getstatus(uuid).then(function (result) {
                            console.log(uuid+"   "+result.code);
                            uuid = result.uuid;    // 这个uuid需从result传过来。 then为异步函数,若从上文取值,则值为最后的赋值
                            switch(result.code){
                                case 201 : $scope.loginstatus[uuid] = '正在登录';break;
                                case 200 : $scope.loginstatus[uuid] = '登录成功';window.clearInterval(logininfo[i]);break;
                                case 500 : $scope.loginstatus[uuid] = '服务器错误';window.clearInterval(logininfo[i]);break;
                                default : $scope.loginstatus[uuid] = '等待';break;       //code  408
                            }
                        },function (err) {
                            console.log(err);
                        })
                        return;
                    }
                },function(err){
                    console.log(err);
                })
            }
            $scope.init();
        })
.service('statusservice',function ($http,$q) {
            var auth = this;
            auth.getstatus = function(uuid){
                var defer = $q.defer();
                // //debug
                // var code = 200;
                // var result = {"uuid":uuid,"code":code};
                // defer.resolve(result);
                // return defer.promise;
                // //=================
                $http.get("/check?uuid="+uuid)
                    .success(function(code){
                        res = {"uuid":uuid,"code":code};
                        defer.resolve(res);
                    })
                    .error(function(err,status){
                        console.log(err);
                        defer.reject(err);
                    })
                return defer.promise;
            }
        })

问题: angularjs的源码如上。 主要的部分是用一个for循环针对每一个qrcode生成一个定时器。 当检测到service 返回的code为200 或者500的时候,就登录成功或失败,停止检测。 现在的问题是当我Service 中的code是直接定义的时候(注释部分),定时器运行正常,检测到200就停。 当service取后端接口code的时候, 发现虽然code有变成200的情况,但是定时器未停止,还是一个循环下去,而且页面上登录成功的元素一直未显示,一直提示等待, 请问问题出在哪里呢。?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!