簡體   English   中英

nodejs mssql事務池

[英]nodejs mssql transaction pool

我有一個打字稿模塊。

public multipleQuery(queries: string[]) {
    return new Promise(async (resolve, reject) => {
      const cPool = new sql.ConnectionPool(this.room.db);
      await cPool.connect().then((pool: any) => {
        const transaction = new sql.Transaction(pool);
        return transaction.begin(async (err: any) => {
          const request = new sql.Request(transaction, { stream: true });
          try {
            queries.forEach(async (q) => {
              await request.query(q);
            });
            transaction.commit((err2: any) => {
              pool.close();
              if (err2) {
                reject(err2);
              } else {
                resolve(true);
              }
            });
          } catch (err) {
            transaction.rollback(() => {
               pool.close();
               reject(err);
            });
          }
        });
      }).catch((err: Error) => {
        cPool.close();
        reject(err);
      });
    });
}

queries變量是一個字符串數組,我在其中插入了很多sql插入查詢。 無論我在查詢中寫什么,我仍然會收到此錯誤,為什么?

RequestError:只能在LoggedIn狀態下發出請求,而不能在SentClientRequest狀態下發出TransactionError:無法獲取該請求的連接。 另一個請求正在進行中。

解決方案是使用async

const async = require("async");

public multipleQuery(queries: string[]) {
return new Promise((resolve, reject) => {
  const pool = new sql.ConnectionPool(this.room.db);
  return pool.connect().then((p: any) => {
    const transaction = new sql.Transaction(p);
    return transaction.begin((err: any) => {
        const request = new sql.Request(transaction);
        if (err) {
          reject(err);
        }
        return async.eachSeries(queries, async (query: any, callback: any) => {
            return request.query(query);
          }, async (err2: any) => {
            if ( err2 ) {
              await transaction.rollback(() => {
                pool.close();
                reject(err2);
              });
            } else {
              await transaction.commit(() => {
                pool.close();
                resolve(true);
              });
            }
          });
      });
  });
});
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM