vue.js 循环发送axios请求,返回的数据异常?

代码如下:

clipboard.png

console如下:

clipboard.png

console.log里的数据是正确的,但是页面渲染的时候数据闪了一下就没了?是不是要做成同步?求解决办法

阅读 10.4k
8 个回答
 var that = this; 
 var promiseAll = subCaidList.map(function(){
    return that.axios.post("url", data)
 })

that.axios.all(promiseAll).then(function(resArr){
      resArr.forEach(function(res,i){
        that.subList[i].categoryList = res.data.data.categoryList 
      })
})

等所有的请求都返回了, 在去处理数据. 这样就不存在异步以及循环 i 导致的闭包问题了.

不明白你要问什么?
请求异步 肯定先输出console.log(that.subList)
其次我认为then里面的i不正确,你输出一下试试

你想问什么?axios是异步的,肯定先打印console.log(that.subList)了。

循环发请求 用async 和for of

确实不明白你要问什么。。。
其次,你这里for循环嵌套http请求,是不是会有第一个请求获取到的数据被第二个循环中http请求的数据覆盖?

楼上说的很对,需要把i缓存下来

新手上路,请多包涵

我靠!你没打印一下看看你的i是多少啊?????,for循环的是一下子就跑完了的。下面得到的i全都是一样的

需要用闭包把i传进去。写个自执行函数,把i的值传进去。

(function(k){
//你现在for循环里的内容

}(i))

用vuex里面的action有异步功能。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏