2016-03-21 14 views
0

私はいくつかの約束をつなぎとめようとしていますが、その概念を理解することに問題があります。Javascript Promise Chain - ES6

データベースからいくつかのデータを返そうとしていますが、行数が選択した量より少ない場合にのみ、エラーが返されます。

これまでのところ私は、データをフェッチし、そのような約束を返すメソッドを持っている:

fetchDataPoints(dataset,fields,startTimestamp,endTimestamp){ 

     let self = this; 
     let queryBody = " FROM [bi].[" + dataset + "] " + 
      "WHERE [timestamp] >= '" + startTimestamp.format("YYYY-MM-DD HH:mm:ss") + "' " + 
      "AND [timestamp] < '" + endTimestamp.format("YYYY-MM-DD HH:mm:ss") + "' " ; 


     let rowCountCheck = new Promise(function(resolve,reject) { 
      let request = new self.sql.Request(); 

      let rowCheckQueryString = "SELECT COUNT(*) AS row_count " + queryBody; 
      request.query(rowCheckQueryString).then(function(recordSet){ 
       if (recordSet[0].row_count > self._rowLimit) { 
        reject("Too many rows"); 
       } else { 
        resolve(); 
       } 
      }); 
     }); 

     let request = new self.sql.Request(); 

     let fieldsString = "[timestamp],[etl_timestamp]"; 
     for(let i = 0; i < fields.length; i++){ 
      fieldsString += ",[" + fields[i] + "]"; 
     } 
     let resultQueryString = "SELECT " + fieldsString + queryBody + " ORDER BY [timestamp] DESC"; 
     let resultQuery = request.query(resultQueryString); 

     return rowCountCheck.then(resultQuery); 

    } 

は、しかし、これは予想されるようにし機能していません。プロミスにもっと慣れている人は、このようなことにどのように使用されるのかを明確にすることができますか?あなたが代わりにコールバック関数としてそれを使用しての、request.queryを返すことができます

+0

は[ 'Promise'コンストラクタアンチパターン](http://stackoverflow.com/q/23803743/1048572を避けてください)! 'request.query(...)'はすでに約束を返すようです。 – Bergi

+0

「約束」ではなく、「then」の引数としてコールバック関数を渡す必要があります。 – Bergi

+0

request.query(...)は約束を返します。私は約束を返送したいと思います。どのようにこれについて行くだろうか?最初のクエリの行数が多すぎると拒否することを約束したいと思います。 –

答えて

2

return rowCountCheck.then(function(response){ 
     let request = new self.sql.Request(); 
     let fieldsString = "[timestamp],[etl_timestamp]"; 

     for(let i = 0;i < fields.length; i++){ 
      fieldsString += ",[" + fields[i] + "]"; 
     } 

     let resultQueryString = "SELECT " + fieldsString + queryBody + " ORDER BY [timestamp] DESC"; 

     return request.query(resultQueryString); 
}); 
` 
+0

それはうまくいきました。 –