首页 > 解决方案 > 在异步循环问题中反应 if 语句

问题描述

帮助,我似乎无法弄清楚如何解决这个问题:

array.map(object => {
   console.log(this.state.newArr) // [] didn't update despite setState
   if (this.state.newArr.length === 0) {
      axios.get('http://localhost/')
      .then(res => {
         this.setState(prevState => ({ newArr: [...prevState.newArr, res] })) // setState here
      })
   }
})

编辑:更新的代码实现了答案,但仍然无法正常工作。

标签: javascriptreactjsasynchronousaxios

解决方案


异步/等待模式可以是一个解决方案。从未在地图中尝试过,但它会是这样的:

array.map(async object => {
  if (this.state.newArr.length === 0) {
     const response = await axios.get('http://localhost/');
     await this.setStateAsync({ newArr: [...this.state.newArr, response] });
     // or without the setStateAsync 
     // this.setState(prevState => ({ newArr: [...prevState.newArr, response] })); 
  }
});

const setStateAsync = state => {
  return new Promise((resolve) => {
    this.setState(state, resolve)
  });
}

推荐阅读