@prequest/cancel-token
TypeScript icon, indicating that this package has built-in type declarations

1.5.2 • Public • Published

@prequest/cancel-token

取消请求。

安装

npm install @prequest/cancel-token

使用

对于业务开发者来说,如何利用 cancelToken 取消请求?

import { prequest } from '@prequest/xhr'
import CancelToken from '@prequest/cancel-token'

const source = CancelToken.source()

prequest.request({
  path: '/api',
  cancelToken: source.token,
})

source.cancel()

你也可以初始化一个请求实例,在页面或组件卸载时,取消所有请求

import { create } from '@prequest/xhr'
import CancelToken from '@prequest/cancel-token'

const source = CancelToken.source()

const prequest = create({ cancelToken: source.token })

useEffect(() => {
  prequest('/api1')
  prequest('/api2')
  prequest('/api3')
  prequest('/api4')

  return () => {
    source.cancel()
  }
}, [])

!> 注意:CancelToken 是一次性的,即取消请求之后,再发起请求,会被直接取消。如果有类似需求,建议在调用完取消后,再为 source 重新赋值一个 CancelToken.source

集成到请求库

对于库开发者,如何将 CancelToken 集成到请求库中?

首先需要设计将 cancelToken 作为可选参数

import CancelToken from '@prequest/cancel-token'

interface Request {
  cancelToken?: CancelToken
}

其次在 adapter 函数中,处理 cancelToken.

function adapter(opt) {
  const { cancelToken } = opt

  return new Promise((resolve, reject) => {
    if (cancelToken) {
      cancelToken.promise.then(() => {
        // 调用原生请求的方法,取消请求。一般用于请求内核提供了取消请求方法的情况下
        nativeRequest.abort()

        reject(new Error('cancel'))
      })
    }
  })

  // ...some code
}

Package Sidebar

Install

npm i @prequest/cancel-token

Weekly Downloads

12

Version

1.5.2

License

MIT

Unpacked Size

10.9 kB

Total Files

11

Last publish

Collaborators

  • thomas_han