Рефакторинг

This commit is contained in:
Book Pauk
2022-10-23 20:51:56 +07:00
parent 723af3ea8b
commit 63dfdaf2c2
2 changed files with 45 additions and 48 deletions

View File

@@ -56,57 +56,54 @@ class DbSearcher {
}
async calcIntersect(idsArr) {
return await this.heavyCalc.run({
args: idsArr,
fn: (args) => {
//из utils.intersectSet
const intersectSet = (arrSet) => {
if (!arrSet.length)
return new Set();
return await this.heavyCalc.run(idsArr, (args) => {
//из utils.intersectSet
const intersectSet = (arrSet) => {
if (!arrSet.length)
return new Set();
let min = 0;
let size = arrSet[0].size;
for (let i = 1; i < arrSet.length; i++) {
if (arrSet[i].size < size) {
min = i;
size = arrSet[i].size;
}
let min = 0;
let size = arrSet[0].size;
for (let i = 1; i < arrSet.length; i++) {
if (arrSet[i].size < size) {
min = i;
size = arrSet[i].size;
}
const result = new Set();
for (const elem of arrSet[min]) {
let inAll = true;
for (let i = 0; i < arrSet.length; i++) {
if (i === min)
continue;
if (!arrSet[i].has(elem)) {
inAll = false;
break;
}
}
if (inAll)
result.add(elem);
}
return result;
};
//считаем пересечение, если надо
let result = [];
if (args.length > 1) {
const arrSet = args.map(ids => new Set(ids));
result = Array.from(intersectSet(arrSet));
} else if (args.length == 1) {
result = args[0];
}
//сортировка
result.sort((a, b) => a - b);
const result = new Set();
for (const elem of arrSet[min]) {
let inAll = true;
for (let i = 0; i < arrSet.length; i++) {
if (i === min)
continue;
if (!arrSet[i].has(elem)) {
inAll = false;
break;
}
}
if (inAll)
result.add(elem);
}
return result;
};
//считаем пересечение, если надо
let result = [];
if (args.length > 1) {
const arrSet = args.map(ids => new Set(ids));
result = Array.from(intersectSet(arrSet));
} else if (args.length == 1) {
result = args[0];
}
//сортировка
result.sort((a, b) => a - b);
return result;
});
}

View File

@@ -66,7 +66,7 @@ class CalcThread {
}
//async
run(params) {//args, fn
run(args, fn) {
return new Promise((resolve, reject) => {
this.requestId++;
@@ -78,7 +78,7 @@ class CalcThread {
});
if (this.worker) {
this.worker.postMessage({requestId: this.requestId, args: params.args, fn: params.fn.toString()});
this.worker.postMessage({requestId: this.requestId, args, fn: fn.toString()});
} else {
reject(new Error('Worker does not exist'));
}
@@ -112,7 +112,7 @@ class HeavyCalc {
}
}
async run(params) {
async run(args, fn) {
if (this.terminated || !this.workers.length)
throw new Error('All workers terminated');
@@ -125,7 +125,7 @@ class HeavyCalc {
try {
this.load[found]++;
return await this.workers[found].run(params);
return await this.workers[found].run(args, fn);
} finally {
this.load[found]--;
}