Javascript 如何使用fetch取消以前的API调用?
假设我正在从一个React应用程序进行多个API调用。在此上下文中,“多个API调用”的意思是:快速点击复选框几次。每次选中复选框时,都会触发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
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,它仅仅意味着回调将不被执行