1

データベースに接続して値を取得する別の関数を呼び出す関数があります。その値はデータベース上の別のトランザクションに使用されるため、実行が完了するまで先に進むことはできません。

yieldそのメソッドの完了を判断promiseし、応答を解決または拒否するために使用しています。これが私がやっている方法です:

co(function*() {
  rec.x = yield getX(a, b);
  //use rec to update something else
  conn.update(rec);
}).catch((err) => {
  console.error(err.stack)
});

function getX(a, b) {
  return conn.getVal(a, b);
}

exports.getVal = function(a, b) {
  return sql.connect(connStr).then(function() {
    return new sql.Request()
      .input('a', sql.VarChar(100), a)
      .input('b', sql.VarChar(50), b)
      .execute('someProc').then(function(recordSet) {
        return Promise.resolve(recordSet[0][0]);
      });
  });
};

このエラーが発生しています:

ConnectionError: Connection is closed.
    at node_modules/mssql/lib/main.js:1613:17
    at doNTCallback0 (node.js:417:9)
    at process._tickCallback (node.js:346:13)

編集

接続文字列:

Uname:pass@server/database
4

1 に答える 1