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(…)确实返回了一个承诺,我想传递一个承诺。这件事怎么办?我希望承诺在第一个查询的行数太高时拒绝。