@lancercomet/fetcher
Version:
Yet another fetcher.
100 lines (74 loc) • 1.51 kB
Markdown
# Fetcher
Yet another fetcher.
## Quick start
```ts
import { Fetcher } from '@lancercomet/fetcher'
const fetcher = new Fetcher()
const { data, error } = await fetcher.requestJSON({
url: '/me',
method: 'GET'
})
```
## Abort a request
```tsx
import { Fetcher } from '@lancercomet/fetcher'
const fetcher = new Fetcher()
const sendRequest = async () => {
const { data, error } = await fetcher.requestJSON({
url: '/me',
method: 'GET'
})
// ...
}
const abortRequest = () => {
fetcher.abort()
}
<button onClick={sendRequest}>Send</button>
<button onclick={abortRequest}>Abort</button>
```
## Work with SunTori
```ts
@Serializable()
class User {
@JsonProperty('name')
readonly username: string = ''
@JsonProperty('age')
readonly age: number = 0
}
const fetcher = new Fetcher()
const { data } = await fetcher.requestJSON({
url: '/me',
method: 'GET',
type: User
})
data instanceof User // true
data.username // string
data.age // number
```
## Request Binary
```ts
// ArrayBuffer.
const { data: buffer, error } = await fetcher.requestBinary({
url: '/binary'
}, 'arraybuffer')
// Blob.
const { data: blob, error } = await fetcher.requestBinary({
url: '/binary'
}, 'blob')
```
## Request the API
"The API" is a type of data structure which would be like:
```json
{
"data": ...,
"code": 0,
"message": "OK"
}
```
```ts
const { data, error, message, code, status } = await fetcher.requestAPI({
...
})
```
## License
Apache-2.0