Я использую socket.io и mongoose на моем экспресс-сервере.
Мой сокет прослушивает события, используя следующий код:
socket.on('do something', async () => {
try {
await doA();
doX();
await doB();
doY();
await doC();
} catch (error) {
console.log(error);
}
});
doA
, doB
и doC
- это асинхронные операции, которые записывают в базу данных с использованием mongoose, но в целом это может быть любой метод, возвращающий обещание.
Я хочу, чтобы «что-то делать» выполнялось синхронно.Если очередь событий обрабатывает больше событий одновременно, у меня возникают проблемы с согласованностью в моем mongodb.
Другими словами, если сервер получает два события «что-то сделать», я хочу, чтобы второе полученное событие обрабатывалось только тогда, когдапервое событие полностью обработано (после await doC
).К сожалению, обратный вызов «сделай что-нибудь» является асинхронным.
Как с этим справиться?