volkov_p_v
@volkov_p_v
FrontEnd разработчик

Как синхронизировать запросы в nodeJs?

В приложении есть одно сокет событие, которое нужно обрабатывать синхронно.
socket.on('something', data=>{
  //тут много логики, но суть такова:
  //запрос в бд и файл, обработка и на основе полученных данных запись
  //не допускать последующих событий, пока данные не запишутся 
})


Как это сделать?
  • Вопрос задан
  • 255 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега Node.js
Crazy on performance...
я бы так сделал:
let tasks = Promise.resolve();
socket.on('something', data => {
  tasks = tasks.then(async () => {
    //тут много логики, но суть такова:
    //запрос в бд и файл, обработка и на основе полученных данных запись
    //не допускать последующих событий, пока данные не запишутся 
  }).catch(e => {
    // обработка ошибок, чтоб процесс не прерывался
  });
});


Естественно, если нужна синхронизация еще и между потоками, то не спасет, только в пределах 1 процесса
если все же многопоточность нужна, то:
1. складываем наши задачи в очередь в redis (RPUSH)
2. разбираем задачи процессами воркерами по одной (LPOP)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
megafax
@megafax
web-программист
Используйте очереди
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы