@alauda-fe/common
Version:
Alauda frontend team common codes.
37 lines • 4.47 kB
JavaScript
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=