猿问

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

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)


慕桂英4014372
浏览 943回答 2
2回答

绝地无双

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

互换的青春

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