Есть метод который сравнивает объекты с большой вложенностью. Сортирует объект по алфавиту и все его ключи, далее он транспилирует его в JSON строку и сравнивает как строки.
defference(obj1, obj2) {
return new Promise(async (res, rej) => {
let result = [];
for (let q in obj1) {
let counter = 0;
start: for (let w in obj2) {
if (await helpers.compareObjects(obj1[q], obj2[w])){ //тупо магическим образом.
break start;
} else {
counter++;
}
}
if (counter === obj2.length) {
result.push(obj1[q]);
}
}
res(result);
});
}
Далее сам метод compareObjects
Helpers.prototype.compareObjects = function(firstObj, secondObj) {
return new Promise(res => {
if (!!firstObj && JSON.parse(JSON.stringify(firstObj)) == 'string') {
if (firstObj == secondObj) {
res(true);
} else {
res(false);
}
} else {
if( JSON.stringify( this.sortObjABS(firstObj) ) !== JSON.stringify( this.sortObjABS(secondObj) ) ) { //Дополнительная проверка массивов и объектов
res(false);
}
}
res(true);
})
}
При вызове метода дефференс сервер ожидает его выполнение и полностью блокирует другие потоки.
const fileData = (baseData)?(await this.defference(objectData, baseData)):objectData;
Метод весь в промисах, полностью пытался избежать синхронности, но в каком то месте я точно ошибся. Укажите прошу на мою ошибку.