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)
阅读 2k
2 个回答

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

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

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