首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Axios/Mobx的React.js应用程序中的无限HTTP404错误响应循环

使用Axios/Mobx的React.js应用程序中的无限HTTP404错误响应循环
EN

Stack Overflow用户
提问于 2020-06-06 05:45:19
回答 1查看 223关注 0票数 1

我正在开发一个使用Axios进行超文本传输协议处理和MobX进行状态管理的React.js应用程序。我收到了这个错误,其中我发送了一个测试无效的HTTP响应,这将导致404错误。但我得到的是一个404错误的循环,不断重复,这是控制台的外观:

下面是产生此错误的方法。我创建了一个“调试模式”版本:

代码语言:javascript
复制
    // for testing
    @action loadActivityDos = async (id: string) => {
        let activity = this.getActivity(id);
        console.log("Step 1: get activity from local activityRegistry");
        if (activity) {
            this.activity = activity;
            console.log("Step 2-1: set local activity to scoped activity");
        } else {
            this.loadingInitial = true;
            try {
                activity = await agent.Activities.details(id);
                runInAction('getting activity', () => {
                    this.activity = activity;
                    this.loadingInitial = false;
                })
                console.log("Step 2-2: get activity from API in the try block");
            } catch(error) {
                runInAction('get activity error', () => {
                    this.loadingInitial = false;
                })
                console.log("Errored -> error block");
            }
        }

首先,该方法在从本地数组中获取“活动”失败后命中try块。等待来自API的“activity”的第一行抛出一个Http 404错误,发送到catch块,其中"Errored -> error block“在控制台中记录。

它应该在这里结束,但是在"Errored -> error block“日志之后,由于未知的原因,它打印了”Step1: get activity from local activityRegistry",这意味着整个方法将从头开始运行。然后它会继续自我重复。

下面是与API通信的Axios代码,但我找不到任何可能导致此行为的代码:

代码语言:javascript
复制
axios.defaults.baseURL = 'https://localhost:5001/api';

const responseBody = (response: AxiosResponse) => response.data;

const sleep = (ms: number) => (response: AxiosResponse) => 
    new Promise<AxiosResponse>(resolve => setTimeout(() => resolve(response), ms));

const requests = {
    get: (url: string) => axios.get(url).then(responseBody),
}

const Activities = {
    list: ():Promise<IActivity[]> => requests.get('/activities'),
    details: (id: string) => requests.get(`/activities/${id}`),
}

我忘记了为什么会发生这种循环,如果有人能给我一些启发,我将非常感激。我很乐意提供任何其他细节。

EN

回答 1

Stack Overflow用户

发布于 2020-06-10 18:11:06

从哪里调用loadActivityDos?你有没有一个reaction来调用它,或者你可能使用useEffect

也许你有一个无穷无尽的reaction循环,它会对你改变的某些标志做出反应

或者可能useEffect最后没有deps数组,所以每次渲染时都会调用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62224543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档