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

js闭包取值

js闭包取值

30秒到达战场 2019-03-26 21:18:57
嵌套调用接口函数来获取并更改信息,但是第二个接口函数取不到循环的i值,尝试传参,但是then方法又不太了解fetchUserList(this.listQuery).then(response => {    this.list = response.data.list    for(var i=0;i < this.list.length;i++){      this.list[i] = Object.assign({},this.list[i],this.list[i].sysUser)      // this.list[i].office = getOfficeInfoById(this.list[i].officeId)      getOfficeInfoById(this.list[i].officeId).then(response =>{        this.office = response.data.data.name        console.log(i)      })    }    console.log(this.list)    this.total = response.data.total     this.listLoading = false  })   
查看完整描述

2 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

解决

把循环里面的var 换成let
for (let i=0;)

原因

你这种写法.每次都是取的最后一个i的值,即i总是等于this.list.length -1

原理

  • 何为异步

    • 就是把所有同步方法执行完毕之后,再开始执行异步方法.即,如果你的循环是5次,那么系统会先执行循环这个代码,执行完一次循环,就在最后面排一个异步方法,一共排上5个,等循环代码执行完了,再依次执行这5个异步方法

    • 等你循环代码执行完的时候,i已经变成5了,所以每个异步方法取的值都是5

  • 何为闭包

    • 闭包就是在异步方法里面,能够取到异步方法外的变量值...你这里的需求是,每个异步方法,取第一次循环的i值.所以必须定义局部变量传参


查看完整回答
反对 回复 2019-04-09
  • 2 回答
  • 0 关注
  • 379 浏览
慕课专栏
更多

添加回答

举报

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