UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

37 lines 4.47 kB
import { finalize, Observable } from 'rxjs'; export class RequestPool { constructor({ maxParallel = 3 }) { this.runnerQueue = []; this.runningCount = 0; this.maxParallel = maxParallel; } queue(request) { return new Observable(observer => { let subscription; const runner = () => { subscription = request .pipe(finalize(() => { this.runningCount--; this.flushQueue(); })) .subscribe(observer); }; this.runnerQueue.push(runner); this.flushQueue(); return () => { subscription?.unsubscribe(); }; }); } flushQueue() { if (this.runningCount < this.maxParallel && this.runnerQueue.length > 0) { this.runningCount++; const run = this.runnerQueue.shift(); run(); } } } export function maxParallelByHttpVersion(http_2 = 30, http_1 = 3) { return location.protocol === 'https:' ? http_2 : http_1; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1wb29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2NvcmUvdXRpbHMvcmVxdWVzdC1wb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUUxRCxNQUFNLE9BQU8sV0FBVztJQUt0QixZQUFZLEVBQUUsV0FBVyxHQUFHLENBQUMsRUFBMkI7UUFIdkMsZ0JBQVcsR0FBc0IsRUFBRSxDQUFDO1FBQzdDLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBR3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxLQUFLLENBQUksT0FBc0I7UUFDN0IsT0FBTyxJQUFJLFVBQVUsQ0FBSSxRQUFRLENBQUMsRUFBRTtZQUNsQyxJQUFJLFlBQTBCLENBQUM7WUFFL0IsTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFO2dCQUNsQixZQUFZLEdBQUcsT0FBTztxQkFDbkIsSUFBSSxDQUNILFFBQVEsQ0FBQyxHQUFHLEVBQUU7b0JBQ1osSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNwQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxDQUNIO3FCQUNBLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6QixDQUFDLENBQUM7WUFFRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFFbEIsT0FBTyxHQUFHLEVBQUU7Z0JBQ1YsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQzlCLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckMsR0FBRyxFQUFFLENBQUM7UUFDUixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsTUFBTSxHQUFHLENBQUM7SUFDOUQsT0FBTyxRQUFRLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDMUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZpbmFsaXplLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNsYXNzIFJlcXVlc3RQb29sIHtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXhQYXJhbGxlbDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHJ1bm5lclF1ZXVlOiBBcnJheTwoKSA9PiB2b2lkPiA9IFtdO1xuICBwcml2YXRlIHJ1bm5pbmdDb3VudCA9IDA7XG5cbiAgY29uc3RydWN0b3IoeyBtYXhQYXJhbGxlbCA9IDMgfTogeyBtYXhQYXJhbGxlbDogbnVtYmVyIH0pIHtcbiAgICB0aGlzLm1heFBhcmFsbGVsID0gbWF4UGFyYWxsZWw7XG4gIH1cblxuICBxdWV1ZTxUPihyZXF1ZXN0OiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPFQ+KG9ic2VydmVyID0+IHtcbiAgICAgIGxldCBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgICAgY29uc3QgcnVubmVyID0gKCkgPT4ge1xuICAgICAgICBzdWJzY3JpcHRpb24gPSByZXF1ZXN0XG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMucnVubmluZ0NvdW50LS07XG4gICAgICAgICAgICAgIHRoaXMuZmx1c2hRdWV1ZSgpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5ydW5uZXJRdWV1ZS5wdXNoKHJ1bm5lcik7XG4gICAgICB0aGlzLmZsdXNoUXVldWUoKTtcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2hRdWV1ZSgpIHtcbiAgICBpZiAodGhpcy5ydW5uaW5nQ291bnQgPCB0aGlzLm1heFBhcmFsbGVsICYmIHRoaXMucnVubmVyUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5ydW5uaW5nQ291bnQrKztcbiAgICAgIGNvbnN0IHJ1biA9IHRoaXMucnVubmVyUXVldWUuc2hpZnQoKTtcbiAgICAgIHJ1bigpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF4UGFyYWxsZWxCeUh0dHBWZXJzaW9uKGh0dHBfMiA9IDMwLCBodHRwXzEgPSAzKSB7XG4gIHJldHVybiBsb2NhdGlvbi5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyBodHRwXzIgOiBodHRwXzE7XG59XG4iXX0=