Promiseを使った非同期処理なので、returnで返すことはできません。
countを使う関数をコールバック関数として渡しておく、
Promiseを自体を返して、thenの中で処理をするなどといった処理を書く必要があります。
Promise自体の説明はここでは無理ですが、簡単に何が起きているか書くと、
countのfunctionが呼ばれた時、connection.thenは非同期で実行される(ブロックされない)のでcount関数はthenの行をすぐにぬけてなにもreturnしないままに終了しています。
その後(count関数の実行が終わった後)、connection.thenの中のfunctionは、connectionの非同期処理が終わった後に呼ばれています。
コールバックの方のコードを示しておきます。
javascript
1// コールバック関数を用意する
2var myCallback = function(count){
3 // カウントが取れたら実行したいこと
4
5}
6
7// コールバックを渡しておく
8var count = function(myCallback) {
9 connection.then(function(){
10 sql = "SELECT count(*) as cnt FROM hogehoge";
11 new mssql.Request().query(sql).then(function(results) {
12 if(results.length > 0){
13 // コールバックを呼ぶ
14 myCallback( results[0].cnt );
15 }
16 }).catch(function(err) {
17 console.log(err);
18 });
19 });
20}
ちょっと余談ですが、Promiseをreturnすればthenで順次解決していくことができますので、
元のコードは以下の様にできそうに思います(すいませんが、実際に動かしてないので)
javascript
1var count = function() {
2 connection.then(function(){
3 sql = "SELECT count(*) as cnt FROM hogehoge";
4 // ここで queryもPromiseを返している様なので、 returnしてしまう。
5 return new mssql.Request().query(sql);
6 })
7 .then(function(results) {
8 // queryが終わったら実行される
9 if(results.length > 0){
10 // results[0].cnt を使った処理を書く
11 }
12 })
13 .catch(function(err) {
14 // このcatchはconnectionの失敗でも取れると思います
15 console.log(err);
16 });
17}
本当は、queryのthenの中で自分でPromise作って・・・などもできるんですが、
ここで説明しきれる内容ではないので割愛します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。