Axios在React Native中取消请求

时间:2020-05-14 09:53:13

标签: react-native axios

我有以下反应本机代码:

.env

此代码用于实时搜索。每当用户输入新字母时,都应取消先前的GET请求。问题在于,键入时,所有请求都会被取消,即使是最后一个请求也会被取消,因此最后没有请求完成。

我在想(但是我不确定)是因为setCancelToken是异步的(它不是立即完成的,但是会有一点延迟)。

当我省去cancelToken东西时,它可以工作,可以看到结果,所以我的服务器端代码还可以。

我尝试了不同的方法:

    const [cancelToken, setCancelToken] = useState()
    const searchUsersHandler = () => {
        if (cancelToken) {
            cancelToken.cancel()
        }
        setCancelToken(axios.CancelToken.source())
        try {
            let response = await axios.get(`/users/${searchQuery}`, {
                headers: {
                    'Accept': 'application/json'
                },
                cancelToken: cancelToken.token
            })
            setUsers(response.data)
        } catch (error) {
            if (axios.isCancel(error)) {
                console.log('cancelled searching for', searchQuery)
            }
        }
    }

我试图将useState挂钩cancelToken更改为let,以使其同步。但是在这段代码中,让cancelToken保持未定义状态。

我认为这是因为每次输入字母时,整个代码都会重新呈现,因此let cancelToken设置为undefined。这是正确的吗?如果是这样,我该如何预防呢?

我还尝试向代码中添加超时,但是结果与第一个代码相同。

我的问题是:现在,所有请求被取消,甚至最后一个请求也被取消。如何重新制作此代码,以便最后一个请求不会被取消?

0 个答案:

没有答案