Chainable async API
Меня всегда интересовало, как DrizzleORM
удаётся чейнить async-функции вроде await delete() и await delete().where().
Они реализовали свой кастомный Promise, от которого наследуются все операции с БД, например PgDelete для delete в Postgres.
Чейнящиеся методы типа delete() и where() просто изменяют внутреннее состояние и всегда возвращают this (тот же самый инстанс промиса).
Поэтому, когда ты делаешь await delete(), под капотом вызывается then() этого промиса, который запускает this.execute().
Реальный запрос к базе выполняется именно в методе execute, который переопределяется в каждом подклассе.
Я считаю, что это очень крутой дизайн API, а сама идея имплементить Promise — просто отличная.
Ссылка на QueryPromise
Ссылка на PgDelete
@WebDev_Plus