Я немного новичок в мире JavaScript / Typescript / Node / Express, но из моих исследований пока не существует «приемлемого» способа блокировки критических участков кода в приложении Node / Express.,Я сталкивался с парой пакетов NPM (async-lock
, await-lock
, rwlock
), но все они имеют удивительно низкое количество загрузок / недель и выглядят так, как будто они не очень хорошо поддерживаются (в том смысле, что их последние публикациистарые, или официальный сопровождающий прямо говорит, что он не поддерживает его активно).Кажется, ни у кого нет определений TypeScript (по крайней мере, насколько я могу судить).И, что наиболее проблематично, ни один из них, похоже, не имеет много с точки зрения документации (кроме пары примеров, чтобы показать использование в общем случае).Я видел здесь несколько вопросов, где люди писали свои собственные (часто активные опросы) блокировки (которые кажутся неоптимальными) или предлагали использовать БД для блокировки (что похоже на тяжелое решение для облегченной проблемы).async-lock
кажется самым популярным из них (количество загрузок), но я немного опасаюсь зависеть от того, за что владелец не несет большой ответственности (а документы довольно тонкие).
Мой вариант использования выглядит довольно простым.Я строю REST-сервер, и у объектов есть некоторые взаимозависимости.Так, например, если кто-то обновляет FOO, а FOO имеют ссылки на BAR, то я бы хотел заблокировать мой критический раздел на «FOO» и «BAR», а затем получить старый FOO, любые связанные BAR, проверить правильностьобновить и записать новый FOO обратно в БД - после чего я бы снял блокировки 'FOO' и 'BAR'.
Так что мой вопрос таков - для простой блокировки критических секций в TypeScript (поддержка несколькиходновременные блокировки / ключи), какова стандартная практика / API / пакет?
Это приложение с одним сервером / одной БД, поэтому нет необходимости в распределенных блокировках - просто пытаюсь разобраться с тем фактом, чтонесколько запросов обрабатываются одновременно из-за «переключения потоков» при асинхронном вводе-выводе.