@masx200/async-task-current-limiter
Advanced tools
Comparing version 2.0.3 to 2.1.0
@@ -5,2 +5,4 @@ import { EventEmitterTarget } from "@masx200/event-emitter-target"; | ||
interface StatusData { | ||
pendingSize: number; | ||
queueSize: number; | ||
status: 空闲状态; | ||
@@ -17,2 +19,3 @@ queue: { | ||
interface AsyncCurrentLimiter { | ||
run<T>(call: () => Promise<T>): Promise<T>; | ||
[Symbol.toStringTag]: string; | ||
@@ -19,0 +22,0 @@ asyncwrap: <T extends (...args: any[]) => Promise<any>>(fun: T) => T; |
@@ -1,2 +0,2 @@ | ||
import e from"@masx200/event-emitter-target";function t(t){if(!("number"==typeof t&&t>0&&1/0>t))throw TypeError(" MAX expected: number;but invalid:"+t);const r=t,n=new Map;let i=0,o=0;const c=e(),u=[];let s=!0;function f(){const e=i;if(!s)return;if(e>=u.length)return void(s=!1);if("full"===a())return void(s=!1);const t=u[e];if(!t)throw Error("accident fun args");const[c,l]=t;i++,u[e]=void 0,function(){if(!(o<r))throw Error("accident incre");o++,h()}();const m=Promise.resolve(Reflect.apply(c,void 0,l));m.finally((()=>{const t=n.get(e);if(!t)throw new Error("accident defer promise");t.resolve(m),function(){if(o-1<0)throw Error("accident decre");o--,h()}()})),Promise.resolve().then((()=>{f()}))}function l(e){let t=u.length;u.push(e),"free"===a()&&(s=!0,f());const r=function(){let e=e=>{},t=e=>{};return{promise:new Promise(((r,n)=>{e=r,t=n})),reject:t,resolve:e}}();return n.set(t,r),r.promise.finally((()=>{n.delete(t)})),Promise.resolve(r.promise)}function a(){return o<r?"free":"full"}c.on("free",(()=>{s=!0,f()})),c.on("full",(()=>{s=!1}));const m={[Symbol.toStringTag]:"AsyncCurrentLimiter",asyncwrap:function(e){return async function(...t){return await l([e,t])}},status:a,limiter:{get max(){return r},get current(){return o}},queue:{get max(){return u.length},get current(){return i}},target:c};function h(){const{queue:e,limiter:t}=m,n={status:a(),queue:{max:e.max,current:e.current},limiter:{max:t.max,current:t.current}};o>=r?c.emit("full",n):c.emit("free",n)}return m}var r=(()=>{try{var e=new Function("return async()=>{}")()(),r=Symbol();Reflect.set(n,r,e)}catch{}function n(e){const r=t(e);return this&&this instanceof n?(Object.assign(this,r),this):Reflect.construct(n,[e])}return n})();export{r as default}; | ||
import e from"@masx200/event-emitter-target";function t(t){if(!("number"==typeof t&&t>0&&1/0>t))throw TypeError(" MAX expected: number;but invalid:"+t);const r=t,n=new Map;let i=0,o=0;const u=e(),c=[];let s=!0;function f(){const e=i;if(!s)return;if(e>=c.length)return void(s=!1);if("full"===a())return void(s=!1);const t=c[e];if(!t)throw Error("accident fun args");const[u,l]=t;i++,c[e]=void 0,function(){if(!(o<r))throw Error("accident incre");o++,h()}();const m=Promise.resolve(Reflect.apply(u,void 0,l));m.finally((()=>{const t=n.get(e);if(!t)throw new Error("accident defer promise");t.resolve(m),function(){if(o-1<0)throw Error("accident decre");o--,h()}()})),Promise.resolve().then((()=>{f()}))}function l(e){let t=c.length;c.push(e),"free"===a()&&(s=!0,f());const r=function(){let e=e=>{},t=e=>{};return{promise:new Promise(((r,n)=>{e=r,t=n})),reject:t,resolve:e}}();return n.set(t,r),r.promise.finally((()=>{n.delete(t)})),Promise.resolve(r.promise)}function a(){return o<r?"free":"full"}u.on("free",(()=>{s=!0,Promise.resolve().then((()=>{f()}))})),u.on("full",(()=>{s=!1}));const m=function(e){return async function(...t){return await l([e,t])}},d={run:e=>m(e)(),[Symbol.toStringTag]:"AsyncCurrentLimiter",asyncwrap:m,status:a,limiter:{get max(){return r},get current(){return o}},queue:{get max(){return c.length},get current(){return i}},target:u};function h(){const{queue:e,limiter:t}=d,i={queueSize:e.max-e.current,pendingSize:n.size,status:a(),queue:{max:e.max,current:e.current},limiter:{max:t.max,current:t.current}};o>=r?u.emit("full",i):u.emit("free",i)}return d}var r=(()=>{try{var e=new Function("return async()=>{}")()(),r=Symbol();Reflect.set(n,r,e),Reflect.set(n,r,void 0)}catch{}function n(e){const r=t(e);return this&&this instanceof n?(Object.assign(this,r),this):Reflect.construct(n,[e])}return n})();export{r as default}; | ||
//# sourceMappingURL=index.js.map |
{ | ||
"version": "2.1.0", | ||
"files": [ | ||
@@ -15,3 +16,2 @@ "dist" | ||
}, | ||
"version": "2.0.3", | ||
"types": "./dist/index.d.ts", | ||
@@ -53,3 +53,3 @@ "main": "./dist/index.min.cjs", | ||
"scripts": { | ||
"format": "prettier *.js --write *.json *.md ./**/*.ts *.mjs", | ||
"format": "prettier --write *.json *.md ./**/*.ts *.mjs */*.js", | ||
"build": "rollup -c rollup.config.mjs ", | ||
@@ -62,3 +62,6 @@ "test": "node ./test/index.js" | ||
"repository": "https://github.com/masx200/async-task-current-limiter", | ||
"packageManager": "yarn@3.2.0" | ||
} | ||
"packageManager": "yarn@3.2.0", | ||
"resolutions": { | ||
"glob-parent": "5.1.2" | ||
} | ||
} |
@@ -87,76 +87,2 @@ # async-task-current-limiter | ||
```ts | ||
declare type 空闲状态 = "free" | "full"; | ||
interface AsyncCurrentLimiter { | ||
[Symbol.toStringTag]: string; | ||
asyncwrap: <T extends (...args: any[]) => Promise<any>>(fun: T) => T; | ||
status: () => 空闲状态; | ||
limiter: { | ||
readonly max: number; | ||
readonly current: number; | ||
}; | ||
queue: { | ||
readonly max: number; | ||
readonly current: number; | ||
}; | ||
target: { | ||
[Symbol.toPrimitive]: () => string; | ||
[Symbol.toStringTag]: string; | ||
[Symbol.iterator]: () => IterableIterator< | ||
[ | ||
import("@masx200/event-emitter-target").EVENTNAME, | ||
import("@masx200/event-emitter-target").EVENTLISTENER[] | ||
] | ||
>; | ||
entries: () => IterableIterator< | ||
[ | ||
import("@masx200/event-emitter-target").EVENTNAME, | ||
import("@masx200/event-emitter-target").EVENTLISTENER[] | ||
] | ||
>; | ||
listenerCount: ( | ||
name: import("@masx200/event-emitter-target").EVENTNAME | ||
) => number; | ||
clear: ( | ||
name: import("@masx200/event-emitter-target").EVENTNAME | ||
) => void; | ||
removeAllListeners: ( | ||
name: import("@masx200/event-emitter-target").EVENTNAME | ||
) => void; | ||
on: ( | ||
name: import("@masx200/event-emitter-target").EVENTNAME, | ||
callback: import("@masx200/event-emitter-target").EVENTLISTENER | ||
) => void; | ||
addListener: ( | ||
name: import("@masx200/event-emitter-target").EVENTNAME, | ||
callback: import("@masx200/event-emitter-target").EVENTLISTENER | ||
) => void; | ||
off: ( | ||
name: import("@masx200/event-emitter-target").EVENTNAME, | ||
callback: import("@masx200/event-emitter-target").EVENTLISTENER | ||
) => void; | ||
removeListener: ( | ||
name: import("@masx200/event-emitter-target").EVENTNAME, | ||
callback: import("@masx200/event-emitter-target").EVENTLISTENER | ||
) => void; | ||
once: ( | ||
name: import("@masx200/event-emitter-target").EVENTNAME, | ||
callback: import("@masx200/event-emitter-target").EVENTLISTENER | ||
) => void; | ||
emit: ( | ||
name: import("@masx200/event-emitter-target").EVENTNAME, | ||
event?: any | ||
) => void; | ||
dispatch: ( | ||
name: import("@masx200/event-emitter-target").EVENTNAME, | ||
event?: any | ||
) => void; | ||
eventNames: () => import("@masx200/event-emitter-target").EVENTNAME[]; | ||
listeners: ( | ||
name: import("@masx200/event-emitter-target").EVENTNAME | ||
) => import("@masx200/event-emitter-target").EVENTLISTENER[]; | ||
}; | ||
} | ||
``` | ||
## `AsyncLimiterClass(max)` | ||
@@ -230,3 +156,3 @@ | ||
# 应用解决问题 | ||
# 应用解决问题例子 | ||
@@ -238,3 +164,3 @@ 使用异步限流器解决同时打开过多文件的报错 | ||
import AsyncLimiterClass from "@masx200/async-task-current-limiter"; | ||
const asynclimiter = AsyncLimiterClass(70); | ||
const asynclimiter = AsyncLimiterClass(50); | ||
@@ -241,0 +167,0 @@ declare const files: string[]; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
58
35258
171