node.js: создание транзакции, охватывающей вызовы в более чем одно хранилище

Я привык кодировать, используя C#, и иногда я создаю транзакции, которые имеют более одного обращения к разным репозиториям, и если одна из них вызывает сбой, откат покрывает каждый репозиторий.

Код выглядит так:

using (var scope = new TransactionScope())
{
    itemRepository.deleteItems(items);
    bookRepository.deleteBooks(books);
    scope.Complete();
}

Это гарантирует, что если в bookRepository произойдет ошибка, удаленные элементы будут возвращены.

Теперь я пытаюсь сделать то же самое с помощью node.js. Я нашел пакет mssql, в котором есть возможность создавать транзакции, но только внутри репозитория, например:

var transaction = new sql.Transaction(/* [connection] */);
transaction.begin(function(err) {
// ... error checks 

var request = new sql.Request(transaction);
    request.query('insert into mytable (mycolumn) values (12345)', function(err, recordset) {
        // ... error checks 

        transaction.commit(function(err, recordset) {
            // ... error checks 

            console.log("Transaction committed.");
        });
    });
});

Итак, есть ли какой-нибудь способ создать транзакцию в Сервисе, которая охватывает более одного репозитория, как я описал?

1 ответ

Решение

Вы можете создать область транзакции, используя красивую среду под названием Sequelize. Если вы посмотрите страницу относительно транзакций, вы сможете найти способ передать транзакцию всем запросам.

 sequelize.transaction(function (t1) {
   // With CLS enabled, the user will be created inside the transaction
   return User.create({ name: 'Alice' });
 });
Другие вопросы по тегам