跳到主要内容

中止获取

AbortController 提供了一种新方式,用于取消不再相关的请求。它可以通过第二个 RequestInit 参数接入 fetch。

Resource​

RestEndpoint 通过 signal 成员提供了简单的集成方式:

const abort = new AbortController();
const AbortableArticle = CoolerArticleResource.get.extend({
signal: abort.signal,
});
// ...somewhere later trigger cancellation
abort.abort();

Endpoint​

此外,借助自定义成员,也可以轻松地为任何 endpoint 添加类似的功能。

type Params = { id: string };

const UserDetail = new Endpoint(
function ({ id }: Params) {
const init: RequestInit = {};
if (this.signal) {
init.signal = this.signal;
}
return fetch(this.url({ id }), init).then(res => res.json()) as Promise<
typeof payload
>;
},
{
url({ id }: Params) { return `/users/${id}` },
signal: undefined as AbortSignal | undefined,
},
);
const abort = new AbortController();
const AbortableUserDetail = UserDetail.extend({
signal: abort.signal,
});
// ...somewhere later trigger cancellation
abort.abort();