为了账号安全,请及时绑定邮箱和手机立即绑定

js循环里有请求服务,如何在success里获取到相应的循序次数值?

js循环里有请求服务,如何在success里获取到相应的循序次数值?

慕容3067478 2018-08-10 10:09:45
$http 是angularjs的模块除了同步以外,还有其他办法做到以下这一点吗? 因为同步效果太慢了。console.log里面打印的全是10.怎么让它打印0,1,2,3,4,5...以此类推for(var i=0; i<10; i++){             $http({                 url : "data.json",                 method : "GET"             }).success(function(data){                 console.log(i)             },function(error){             })         }
查看完整描述

1 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

function send_http(j){
        $http({
            url : "data.json",
            method : "GET"
        }).success(function(data){
            console.log(j)
        },function(error){
        })
}for(var i=0; i<10; i++){
    send_http(i);
}

原因是这样的,js发送http请求的时候,是异步的(ajax嘛)。所以你的success处理的回调函数是只有在请求有返回的时候才会被触发。也就是说,浏览器运行这个for循环的时候,只是发送了一个http请求,并不等待请求有返回,就直接i++了。这就导致ajax收到返回数据并触发回调函数的时候,那个for循环早就执行完了,此时的i也已经是10了。所以console.log(i)这个去输出i的值,得到自然都是10。

然后通过建立一个函数,就可以把i的当前值先存到局部变量j里面,然后for循环完了,就会有10个j变量,互不干扰,就可以正常输出了。


查看完整回答
反对 回复 2018-09-24
  • 1 回答
  • 0 关注
  • 809 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信