Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.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 如何使用fetch取消以前的API调用?_Javascript_Reactjs_Redux_Fetch - Fatal编程技术网

Javascript 如何使用fetch取消以前的API调用?

Javascript 如何使用fetch取消以前的API调用?,javascript,reactjs,redux,fetch,Javascript,Reactjs,Redux,Fetch,假设我正在从一个React应用程序进行多个API调用。在此上下文中,“多个API调用”的意思是:快速点击复选框几次。每次选中复选框时,都会触发API调用 为了更准确地说明这种情况,我将在用户界面上添加一个屏幕截图: 每次选中复选框时,将调用此函数: export function getApplications(authenticationToken, url, query, queryStringIn) { return function(dispatch) { const conf

假设我正在从一个React应用程序进行多个API调用。在此上下文中,“多个API调用”的意思是:快速点击复选框几次。每次选中复选框时,都会触发API调用

为了更准确地说明这种情况,我将在用户界面上添加一个屏幕截图:

每次选中复选框时,将调用此函数:

export function getApplications(authenticationToken, url, query, queryStringIn) {
return function(dispatch) {
    const config = {
        headers: {'Authorization' :"Bearer " + authenticationToken}
    };

    let queryString;

    if (queryStringIn === "" || queryStringIn === null) {
        queryString = queryStringBuilder.buildQuery(query);
    } else {
        queryString = queryStringIn;
    }

    let fetchTask =  fetch(url + "/Applications?" + queryString.toString(), config).then(data => {
        return data.json();
    }).then(applications => {
        dispatch(loadApplicationsSuccess(applications, queryString, query));
    }).catch(error => {
        dispatch(loadApplicationsFailed(error));
    });
    addTask(fetchTask); //ensure that server rendering is waiting for this to complete
    return fetchTask;
}
当我在对同一个API进行新调用之前,快速单击复选框导致API无法返回响应时,就会出现问题

我想要一种只进行最后一次API调用的行为,如果存在任何API调用,则取消之前队列中的API调用


在这种情况下,你们建议怎么办

您无法可靠地中止请求,因为服务器可能已经收到了请求。您可以尝试节流/去抖动。为什么不在第一次单击时禁用该复选框,然后稍后再启用,例如1000毫秒?这可能就是您要查找的内容。因为您使用的是从fetch返回的承诺,所以可以使用
noop
解析过去的承诺。创建一个名为
loading
的变量,在请求启动时将其设置为
true
,在请求完成时将其设置为
false
。每当您发出新请求时,首先检查
加载
是否为
。支持可取消的请求。通过取消,它只是意味着回调将不被执行。您无法可靠地中止请求,因为服务器可能已经收到了请求。您可以尝试节流/去抖动。为什么不在第一次单击时禁用该复选框,然后稍后再启用,例如1000毫秒?这可能就是您要查找的内容。因为您使用的是从fetch返回的承诺,所以可以使用
noop
解析过去的承诺。创建一个名为
loading
的变量,在请求启动时将其设置为
true
,在请求完成时将其设置为
false
。每当您发出新请求时,首先检查
加载
是否为
。支持可取消的请求。通过cancel,它仅仅意味着回调将不被执行