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的情况,但是定时器未停止,还是一个循环下去,而且页面上登录成功的元素一直未显示,一直提示等待, 请问问题出在哪里呢。?