Javascript承诺链-ES6
我正试图把一些承诺串连起来,但由于理解这些概念而遇到了麻烦 我试图从数据库中返回一些数据,但前提是行数小于所选数量,否则将返回错误 到目前为止,我有一个方法来获取数据并返回如下承诺:Javascript承诺链-ES6,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,我正试图把一些承诺串连起来,但由于理解这些概念而遇到了麻烦 我试图从数据库中返回一些数据,但前提是行数小于所选数量,否则将返回错误 到目前为止,我有一个方法来获取数据并返回如下承诺: fetchDataPoints(dataset,fields,startTimestamp,endTimestamp){ let self = this; let queryBody = " FROM [bi].[" + dataset + "] " +
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);
}
fetchDataPoints(数据集、字段、startTimestamp、endTimestamp){
让自我=这个;
让queryBody=“来自[bi]。”+dataset+“]”+
“其中,[timestamp]>=”+startTimestamp.format(“YYYY-MM-DD HH:MM:ss”)+“”+
“和[时间戳]<'”+endTimestamp.format(“YYYY-MM-DD HH:MM:ss”)+”;
let rowCountCheck=新承诺(函数(解析、拒绝){
let request=new self.sql.request();
让rowCheckQueryString=“选择计数(*)作为行计数”+queryBody;
request.query(rowCheckQueryString).then(函数(记录集){
if(记录集[0]。行计数>自。\行限制){
拒绝(“太多行”);
}否则{
解决();
}
});
});
let request=new self.sql.request();
让fieldsString=“[timestamp],[etl_timestamp]”;
for(设i=0;i
然而,这并没有以预期的方式发挥作用。更熟悉承诺的人是否能够澄清他们将如何用于此类事情?您可以返回request.query,而不是将其用作回调函数:
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);
});
`
返回rowCountCheck.then(函数(响应){
let request=new self.sql.request();
让fieldsString=“[timestamp],[etl_timestamp]”;
for(设i=0;i
您可以返回request.query,而不是将其用作回调函数:
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);
});
`
返回rowCountCheck.then(函数(响应){
let request=new self.sql.request();
让fieldsString=“[timestamp],[etl_timestamp]”;
for(设i=0;i
避免出现错误request.query(…)
似乎已经返回了一个承诺。您必须传递一个回调函数,而不是承诺,作为的参数,然后
。request.query(…)确实返回了一个承诺,我想传递一个承诺。这件事怎么办?我希望承诺在第一个查询的行数过高时拒绝。请避免request.query(…)
似乎已经返回了一个承诺。您必须传递一个回调函数,而不是承诺,作为的参数,然后
。request.query(…)确实返回了一个承诺,我想传递一个承诺。这件事怎么办?我希望承诺在第一个查询的行数太高时拒绝。