У меня следующая проблема: я позволил двум функциям записать в мою базу данных. Прежде чем они будут вставлены в базу данных, я проверяю, существует ли подобный элемент:
const storeListing = async listing => {
//Some logic
const foundSimilar = await findSimilar(listing);
if(!foundSimilar){
await insertListing(listing)
}else{
//Perform duplicate check
if(foundSimilar.buildingType===listing.buildingType){
console.log('found')
}
}
}
Теперь, когда я делаю следующее:
const test = () => {
storeListing({buildingType:'MFH'});
storeListing({buildingType:'MFH'});
}
Условие else с проверкой на дублирование никогда не срабатывает.
Моя идея заключается в том, что две функции обрабатываются последовательно (цикл обработки событий). Таким образом, storeListing не может быть вызван снова, пока один не будет сделан.
Так у меня есть логическая проблема здесь или это просто база данных, имеющая возможную согласованность?
Редактировать: Когда я делаюне знаю, сколько других функций вызывают storeListing, и я хочу, чтобы это происходило сериализованно (например, у меня есть storeListing для Multi family house - список магазинов для дома на одну семью).
Является ли это хорошим шаблоном:
const lock={};
export const storeListing = async (listing, type) => {
const id= uuidv1();
while (Object.keys(lock).length>0){
await timeout(15);
}
threadLock[id]=true;
//Function like above
delete lock[id];
}