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

js异步list.push和setTimeout,list.splice的时间差问题该怎么解决?

/ 猿问

js异步list.push和setTimeout,list.splice的时间差问题该怎么解决?

慕桂英4014372 2019-05-19 14:19:54

list//页面展示数组

cacheList//缓存数组,ajax


setTimeout((=>{

    list.shift();

    if(cacheList.length<=8){

      this.getData();

    }

    

    const arr = this.state.cacheList.splice(0,num);

    // 这一步cacheList是[]

    //刚好下一步ajax成功了,cacheList.push成功了,结果cacheList应该有长度

    //但是被上一步setState 进去了

    list.push(...arr);

    

    this.setState({

      list,

      cacheList

    })

}),2000)


查看完整描述

2 回答

?
绝地无双

把后面的操作也放在ajax的回调里面。


查看完整回答
反对 回复 2019-05-19
?
互换的青春

不明白题主想要表达的意思是什么, 或许该了解一下js的执行顺序, list.push 等等操作和 setTimeout之间是不存在 "时间差" 这个东西的。 setTimeout 和 ajax 都是异步的操作。他们的回调函数是要等当前执行栈里面的任务执行完毕之后才会执行的。建议了解javascript事件循环机制 或许你应该等到在异步执行成功后的回调函数里面去拿到数据之后再做相关操作。


查看完整回答
反对 回复 2019-05-19

添加回答

回复

举报

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