简体   繁体   English

Javascript承诺链-ES6

[英]Javascript Promise Chain - ES6

I am trying to chain up some promises, but having trouble due to understanding the concepts. 我正在尝试兑现一些承诺,但是由于理解概念而遇到麻烦。

I am trying to return some data from a database, only if the row count is less than a selected amount, otherwise it will return an error. 我试图从数据库中返回一些数据,仅当行数少于选定的数量时,否则它将返回错误。

So far I have a method to fetch data and return a promise like so: 到目前为止,我有一种获取数据并返回promise的方法,如下所示:

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);

    }

However this is not working in the expected manner. 但是,这不能以预期的方式工作。 Would someone who is more familiar with Promises be able to clarify how they'd be used for this kind of thing? 更加了解Promises的人是否能够阐明将如何用于此类事情?

You can return request.query, instead of using it as a call back function: 您可以返回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);
});
`

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM