Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在使用axios.CancelToken后进行异步调用?_Javascript_Reactjs_Api_React Native_Axios - Fatal编程技术网

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,我学到了一些东西。我不知道为什么有人在没有解释的情况下投了反对票。