javascript - 如何在循环中使用 Fetch 查询?

标签 javascript reactjs

我通过具有不同 url 的 map 向服务器发出请求,然后我将数据设置为 State 并将其用于输出。我希望请求是连续的,但有时它们无法正常工作并出现错误,如何编写正常数据检索的代码?

const urlList = ["countries", "states", "cities", "users"];
componentDidMount() {
         urlList.map( (url, index) => {
            return servicesAPI.getResourse(url).then( (body) => {
                index !== 3 ?  this.setState({
                                 dataAPI : [...this.state.dataAPI, body] }) :
                                this.setState({
                                    dataAPI : [...this.state.dataAPI, body],
                                    loaded: true
                                })

            })
        })
export default  class ServicesAPI {
    _apiBase = `http://localhost:3001/`;


    async getResourse(url) {
        const res = await fetch(`${this._apiBase}${url}`);

        if (!res.ok) {
            throw new Error(`Could not fetch ${url}` +
                `, received ${res.status}`)
        }
        return await res.json();
    }

最佳答案

使用Promise.all();

componentDidMount() {
     const fetchPromises = [];
     urlList.forEach( (url, index) => {
        fetchPromises.push(servicesAPI.getResourse(url));
     });

     const allResourcesPromise = Promise.all(fetchPromises);
     allResourcesPromise.then(data => {
        // list with responses
     }).catch(err => {
        console.log(err.toString());
     });

}

示例: https://jsbin.com/vevufumano/1/edit?html,js,console,output

此外,在可能的情况下,您可以使用 async/await 来获得更简洁的代码。

关于javascript - 如何在循环中使用 Fetch 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56935614/

相关文章:

javascript - 停止对 div 内的链接执行 JavaScript 操作

reactjs - React.render 返回什么?组件实例还是组件类?

reactjs - 可以在 setState 中修改 prevState 的一部分吗?

javascript - redux connect mapStateToProps 在调度 Action 时不调用

javascript - 如何在 React 中创建可排序的表格?如何从排序的对象访问类方法?

reactjs - 当我尝试显示组件 onClick 时,React State 保持不可变

javascript - 从 Java 传递的 Nashorn 和 'with' 上下文

javascript - 如何通过按回车按钮将焦点设置在下一个 "enable"输入框上

javascript - 如何为表格的单元格设置特定的ID

javascript - 如何减少对现有 Angular 5 元素的添加