【发布时间】:2019-03-26 16:14:10
【问题描述】:
我有一个 fetch 服务,它向 API 发送请求(使用 Redux-thunk)。我有时想取消这些请求(通常是用户单击取消按钮)。
我在此服务中使用 AbortController,并在组件的方法中调用此控制器的 abort 方法。第一次,请求被正确中止,但是当我想再次发出这个请求时,它也会自动中止(即使 Chrome 的网络选项卡中没有请求,它也会立即拒绝)。
// fetching service
const abortController = new AbortController();
const acSignal = abortController.signal;
export { abortController };
export default class FetchService {
public static post(url: string): Promise<Response> {
const requestOptions = {
method: 'POST',
body: ...
signal: acSignal
};
return new Promise((resolve, reject) => {
fetch(url, requestOptions)
.then(resolve, reject);
});
}
}
// Component
import React from 'react';
import { abortController } from '../FetchService';
class Comp extends React.Component<{}, {}> {
...
onCancelRequest = () => {
// on cancel button click, abort request
abortController.abort();
}
onButtonClick = () => {
// initiate request
}
}
onButtonClick -> 请求 -> onCancelRequest -> 请求中止 -> 再次 onButtonClick -> 请求自动中止(没有其他 onCancelRequest)
有什么提示可能是错误的吗?我只是想在它被中止后再次发出请求。
【问题讨论】:
-
我会切换到使用 Axios 并存储取消令牌,以便您可以在执行某个操作时取消它们。 Fetch 不允许您立即取消请求。
标签: javascript reactjs redux