[fix] readme

This commit is contained in:
Anton Nesterov 2024-07-11 01:36:44 +02:00
parent 9ca50199f9
commit 2550f7e165
4 changed files with 62 additions and 47 deletions

View file

@ -16,4 +16,4 @@ jobs:
- uses: actions/checkout@v4
- name: Publish package
run: npx jsr publish
run: npx jsr publish

103
README.md
View file

@ -21,6 +21,28 @@ bun add github:nesterow/limiter # or pnpm
## Usage
### Add tasks
```typescript
import { Limiter, LimiterRetryError } from "@nesterow/limiter";
const task = ({ url }) => {
await fetch(url);
// ... write
};
const limiter = new Limiter({
limit: 20,
onError(error) {
// Logger.error(error)
},
});
limiter.process(task);
limiter.process(task);
limiter.process(task);
```
### Limit number of requests
```typescript
@ -35,81 +57,74 @@ const limiter = new Limiter({
limit: 10,
});
for (let i = 0; i < 100; i++) {
await limiter.process(task);
}
await limiter.process(...Array.from({ length: 100 }, () => task()));
```
### Limit RPS
```typescript
import {Limiter} from '@nesterow/limiter'
import { Limiter } from "@nesterow/limiter";
const execEvery100ms = () => {
await fetch('https://my.api.xyz')
// ... write
}
await fetch("https://my.api.xyz");
// ... write
};
const limiter = new Limiter({
limit: 20
rps: 10
})
for (let i=0; i < 100; i++) {
await limiter.process(execEvery100ms)
}
limit: 20,
rps: 10,
});
await limiter.process(...Array.from({ length: 100 }, () => execEvery100ms()));
```
### Retry
```typescript
import {Limiter, LimiterRetryError} from '@nesterow/limiter'
import { Limiter, LimiterRetryError } from "@nesterow/limiter";
const retry5times = () => {
await fetch('https://my.api.xyz')
throw new Error("Connection refused")
// ... write
}
await fetch("https://my.api.xyz");
throw new Error("Connection refused");
// ... write
};
const limiter = new Limiter({
limit: 20
maxRetry: 5
})
limit: 20,
maxRetry: 5,
});
for (let i=0; i < 100; i++) {
try {
await limiter.process(retry5times)
} catch(e) {
if (e instanceof LimiterRetryError) {
// Logger.log(e)
}
for (let i = 0; i < 100; i++) {
try {
await limiter.process(Array.from({ length: 100 }, () => retry5times()));
} catch (e) {
if (e instanceof LimiterRetryError) {
// Logger.log(e)
}
}
}
```
### Handle errors in background
```typescript
import {Limiter, LimiterRetryError} from '@nesterow/limiter'
import { Limiter, LimiterRetryError } from "@nesterow/limiter";
const wontStopPooling = () => {
await fetch('https://my.api.xyz')
throw new Error("Connection refused")
// ... write
}
await fetch("https://my.api.xyz");
throw new Error("Connection refused");
// ... write
};
const limiter = new Limiter({
limit: 20
maxRetry: 5,
onError(error) {
// Logger.error(error)
}
})
limit: 20,
maxRetry: 5,
onError(error) {
// Logger.error(error)
},
});
for (let i=0; i < 100; i++) {
await limiter.process(wontStopPooling)
for (let i = 0; i < 100; i++) {
await limiter.process(Array.from({ length: 100 }, () => wontStopPooling()));
}
```

View file

@ -1,5 +1,5 @@
{
"name": "@nesterow/limiter",
"version": "0.1.0",
"version": "0.1.1",
"exports": "./limiter.ts"
}

View file

@ -1,5 +1,5 @@
{
"version": "0.1.0",
"version": "0.1.1",
"name": "@nesterow/limiter",
"module": "limiter.ts",
"type": "module",