Bazı sözleri zincirlemeye çalışıyorum, ancak kavramları anlamada sorun yaşıyorum.Javascript Promise Chain - ES6
Veritabanından bazı verileri yalnızca satır sayısı seçilen bir miktardan daha az olduğunda döndürmeye çalışıyorum, aksi halde bir hata döndürür.
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);
}
Ancak bu beklenen şekilde çalışmıyor:
Şimdiye kadar şöyle bir söz veri almaya ve döndürmek için bir yöntem var. Promises'e daha aşina olan biri bu tür bir şey için nasıl kullanılacağını açıklığa kavuşturabilir mi?
[ 'Promise' yapıcı antipattern] kaçının (http://stackoverflow.com/q/23803743/1048572)! request.query (…) 'zaten bir söz vermiş görünüyor. – Bergi
"Geri" argümanı olarak bir geri arama işlevi, söz değil, geçmelisiniz. – Bergi
request.query (...) bir söz vermez ve bir söz geri vermek istiyorum. Bu nasıl olur? İlk sorgudan satır sayımı çok yüksek olduğunda reddetme vaadini isterim. –