Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.10.2019, 17:37
Аспирант
Отправить личное сообщение для sniffysko Посмотреть профиль Найти все сообщения от sniffysko
 
Регистрация: 20.10.2009
Сообщений: 79

Транзакции MSSQL async/await
Прошу подсказать, если кто знает. На пишу класс, который должен поддерживать транзакции на MSSQL. Вот пример кода:

async queryTransact(q, params){
    try {
        const transaction = new sql.Transaction(this._pool);
        await transaction.begin();
        const request = new sql.Request(transaction);
        request.input('id', 100);
        const result = await request.query(q);
        await transaction.commit();
        return Promise.resolve(result);
    }catch(err){
        await transaction.rollback();
        console.log("Error", err);
        return Promise.reject(err);
    }
}

Правильно ли я отрабатываю транзакцию и rollback?
Т.к. нормальной документации по этому вопросу я не нашел. Все примеры предлагают callback подход.
Ответить с цитированием
  #2 (permalink)  
Старый 11.10.2019, 13:09
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

const transaction = new sql.Transaction(this._pool);

не в scope в catch - будет ошибка
Ответить с цитированием
  #3 (permalink)  
Старый 11.10.2019, 18:15
Аспирант
Отправить личное сообщение для sniffysko Посмотреть профиль Найти все сообщения от sniffysko
 
Регистрация: 20.10.2009
Сообщений: 79

Немного не понял вашего замечания.
Пример вероятно несколько некорректный, поскольку queryTransact -- метод класса. И this относится к классу. А переменная _pool инициируется в конструкторе. Можно наверное привести пример всего класса, но меня волновало именно правильно ли я отрабатываю rollback. Я на 90% уверен, что не правильно. :о)
Ответить с цитированием
  #4 (permalink)  
Старый 13.10.2019, 19:11
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Если метод (функция) не прмисифицирован, то засовывать его в async-функцию бессмысленно - оно работать там не может, даже если перед ним пять раз написать await.
Если в документации модуля имеются примеры только с callback-функциями - это наверняка значит, что методы не промисифицированы.
Теоретически существует утилита для промисификации непромисифицированных методов - (тырц)
Ответить с цитированием
  #5 (permalink)  
Старый 15.10.2019, 10:24
Аспирант
Отправить личное сообщение для sniffysko Посмотреть профиль Найти все сообщения от sniffysko
 
Регистрация: 20.10.2009
Сообщений: 79

Промисификация
Дело как раз в том, что методы у них промисифицированы. Точнее так: если есть каллбэк -- идум на каллбек, иначе промис. Например код ф-ции transaction.begin:
begin (isolationLevel, callback) {
    if (isolationLevel instanceof Function) {
      callback = isolationLevel
      isolationLevel = undefined
    }

    if (typeof callback === 'function') {
      this._begin(isolationLevel, err => {
        if (!err) {
          this.emit('begin')
        }
        callback(err)
      })
      return this
    }

    return new PromiseLibrary((resolve, reject) => {
      this._begin(isolationLevel, err => {
        if (err) return reject(err)
        this.emit('begin')
        resolve(this)
      })
    })
  }

Примеры же, да, используют подход каллбэков. Но, встречаются и примеры await. Что говорит о том, что ребята пошли по пути покрытия двух подходов.
Ответить с цитированием
  #6 (permalink)  
Старый 15.10.2019, 19:23
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Значит, всё нормально.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу выбрать запись в mssql ghosttim Node.JS 4 23.08.2016 16:46
Как работать с mssql с локального комьпютера в php EvgLuch Общие вопросы Javascript 1 30.01.2014 08:53
Google Analytics комерция несколко товаров в 1 транзакции sig Общие вопросы Javascript 0 28.10.2013 14:26
JSON - отобразить данные таблицы oracle / mssql / mysql ecivgamer Javascript под браузер 3 14.11.2012 18:17
Подзагрузка из MSSQL в Selecte vanek2010 AJAX и COMET 2 11.04.2010 17:18