Javascript 如何在使用axios.CancelToken后进行异步调用?
我正在构建一个Javascript 如何在使用axios.CancelToken后进行异步调用?,javascript,reactjs,api,react-native,axios,Javascript,Reactjs,Api,React Native,Axios,我正在构建一个React Native应用程序。我的API组件包含一个我希望能够停止的异步调用。为此,我使用了axios.CancelToken: const source=axios.CancelToken.source(); 异步getProductCategoriesRequest(){ 试一试{ let response=wait catalog.get(`category`{ cancelToken:source.token, }); 返回响应数据; }捕获(错误){ if(axios
React Native
应用程序。我的API组件包含一个我希望能够停止的异步调用。为此,我使用了axios.CancelToken
:
const source=axios.CancelToken.source();
异步getProductCategoriesRequest(){
试一试{
let response=wait catalog.get(`category`{
cancelToken:source.token,
});
返回响应数据;
}捕获(错误){
if(axios.isCancel(错误)){
console.log(错误)
返回承诺。拒绝();
}
}
}
在我的组件中,我在onPress
上调用requestCancellationHandler
:
const requestCancellationHandler=()=>{
source.cancel('API请求被取消');
props.resetState();
};
一切正常,除了我不能再打电话,除非我重新加载应用程序。我在API请求捕获中不断收到Cancel{消息:“API请求正在被取消”}
。简单的页面重新加载允许我进行另一个异步调用
如何在不重新加载的情况下解决该问题?我认为中的第二个示例会很有用
const CancelToken = axios.CancelToken;
let cancel;
axios.get('/user/12345', {
cancelToken: new CancelToken(function executor(c) {
// An executor function receives a cancel function as a parameter
cancel = c;
})
});
// cancel the request
cancel();
在您的情况下,
let source;
async getProductCategoriesRequest() {
source = axios.CancelToken.source();
try {
let response = await catalog.get(`category`, {
cancelToken: source.token,
});
return response.data;
} catch (error) {
if (axios.isCancel(error)) {
console.log(error)
return Promise.reject();
}
}
}
及
我认为报告中的第二个例子会很有用
const CancelToken = axios.CancelToken;
let cancel;
axios.get('/user/12345', {
cancelToken: new CancelToken(function executor(c) {
// An executor function receives a cancel function as a parameter
cancel = c;
})
});
// cancel the request
cancel();
在您的情况下,
let source;
async getProductCategoriesRequest() {
source = axios.CancelToken.source();
try {
let response = await catalog.get(`category`, {
cancelToken: source.token,
});
return response.data;
} catch (error) {
if (axios.isCancel(error)) {
console.log(error)
return Promise.reject();
}
}
}
及
您要求取消axios请求。你不能那样做。只是提出一个新的请求。不,问题是我取消后不能再提出另一个请求。它只允许我在重新启动应用程序后发送另一个请求。您如何调用
getProductCategoriesRequest
?看起来您可能需要创建一个新的CancelToken,如。您可以更改为let source
,并在每个请求之前在getProductCategoriesRequest
内设置source=axios.CancelToken.source()
。抱歉。我从我的reducer调用它export const getCatalog=(id)=>async(dispatch)=>{…让productCategoriesData=wait catalogAPI.getProductCategoriesRequest();…}
您请求取消axios请求。你不能那样做。只是提出一个新的请求。不,问题是我取消后不能再提出另一个请求。它只允许我在重新启动应用程序后发送另一个请求。您如何调用getProductCategoriesRequest
?看起来您可能需要创建一个新的CancelToken,如。您可以更改为let source
,并在每个请求之前在getProductCategoriesRequest
内设置source=axios.CancelToken.source()
。抱歉。我从我的reducer调用它export const getCatalog=(id)=>async(dispatch)=>{…让productCategoriesData=wait catalogAPI.getProductCategoriesRequest();…}
谢谢你的提问,我不怎么使用Axios,我学到了一些东西。我不知道为什么有人在没有解释的情况下投了反对票。谢谢你的提问,我不怎么使用Axios,我学到了一些东西。我不知道为什么有人在没有解释的情况下投了反对票。