Общий node.js / JavaScript вопрос и цикл событий - PullRequest
0 голосов
/ 21 ноября 2019

У меня следующая проблема: я позволил двум функциям записать в мою базу данных. Прежде чем они будут вставлены в базу данных, я проверяю, существует ли подобный элемент:

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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...