javascript - 检测包含 http 请求的 forEach 循环结束?

标签 javascript reactjs axios

我有这个函数和内部 forEach 循环迭代槽项目......我想要实现的是呈现一些微调器(加载器)直到所有 http请求完成,直到 forEach 循环完成。

我现在尝试的方式是,第一个和最后一个 console.log 立即触发,然后记录第二个 console.log 的次数与项目中的项目一样多大批。

forEach 迭代完成时,当所有 http 请求完成时,如何将状态更新为 loading: false

someHandler = () => {
    // this.setState({ loading: false })
       console.log( "Not loading" )
    this.props.items.forEach(item => {
      axios
        .get(`.../${item}/`)
        .then(res => {
          this.setState(prevState => ({
            item: [
              ...prevState.item,
              {
                name: res.data.name,
                img: res.data.img
              }
            ]
          }));
          this.props.newItem(this.state.item);
          // this.setState({ loading: true })
             console.log( "Loading" )
        })
        .catch(err => {
          console.log(err);
          // this.setState({ loading: false })
             console.log( "Not loading" )
        });
    });
    // this.setState({ loading: false })
       console.log( "Not loading" )
  };

最佳答案

您可以将 async/awaitfor...of 一起使用

您可以假设使用这种方法顺序执行。

someHandler = async () => {
  console.log('Not loading'); // will execute before loop
  this.setState({ loading: true }); // start loading

  for (let item of this.props.items) {
    const res = await axios.get(`.../${item}/`);
    // ... do your logic with response
    console.log('Loading');
  }

  console.log('Not loading'); // will execute after loop
  this.setState({ loading: false }); // end loading
};

关于javascript - 检测包含 http 请求的 forEach 循环结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53723820/

相关文章:

javascript - 使用 Context API 在函数组件中未定义 React 状态属性

promise - Axios 使用拦截器处理错误(js promise )

javascript - 仅 SVG attr( y ) 不能立即起作用

javascript - 在折线图中添加不同的标签 - Chart.js

javascript - 通过标签名称获取元素 : How to select more than one type of tag?

reactjs - 错误 TS2314 : Generic type 'Component<P, S>' requires 2 type argument(s)

javascript - 从 iframe 中获取 iframe 的 URL 参数

javascript - Flexbox 从元素数组中展开全宽元素

javascript - axios Post请求没有React功能

node.js - 如何在nodejs中的axios POST请求中传递文本/纯内容