Javascript: Асинхронное объединение функций в классе с возвратом этого - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь выполнить связывание функций в классе Javascript, возвращая это после каждого метода, но почему-то это не работает ..:

let sql = require('mssql');
let {logger} = require('../utils/logger');
let config = require('config');
//mssql_stellenanzeigen_config = config.get('stellenanzeigen');
mssql_doublettencheckui_config = config.get('doublettencheckui');


class MSSQLConnectionObject {
    constructor(configuration) {
        this.configuration = configuration; 
        this.connection = undefined;    
        this.requestObject = undefined;  
    }

    async build() {
        let pool;
        try {
            pool = await new sql.ConnectionPool(this.configuration).connect(); 
            console.log("Connection established!: ", pool);
        } catch(e) {
            logger.error("No SQL Database config or wrong config. Can't establish connection to MSSQL Server. " + e);
        }    
        this.requestObject = await new sql.Request(pool);

        return this;
    }

    static async connect(config) {        
        let pool;
        try {
            pool = await new sql.ConnectionPool(config).connect(); 
            console.log("Connection established!: ", pool);
        } catch(e) {
            logger.error("No SQL Database config or wrong config. Can't establish connection to MSSQL Server. " + e);
        }    
        this.requestObject = await new sql.Request(pool);
        return this;
    }

    async getBuchungsquelle() {
        const query = `SELECT * FROM buchungsquelle`;
        return await this.requestObject.query(query).then((result) => console.log(result)).catch(err => console.log(err));
    }
}

module.exports = {
    MSSQLConnectionObject
}

   let query= `select * from buchungsquelle`;  

   let a = new MSSQLConnectionObject(mssql_doublettencheckui_config);
   a.build().getBuchungsquelle();

Я получаю ошибку:

a.build().getBuchungsquelle();            

TypeError: a.build(...).getBuchungsquelle is not a function

почему это не работает?Есть ли ошибка в том, как вернуть это из моих функций?

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

TypeError: a.build (...). GetBuchungsquelle не является функцией

build является функцией async. Когда вы говорите return this, он создает функцию, которая возвращает обещание, которое разрешается до this, а не функцию, которая возвращает this.

Таким образом, чтобы использовать его, нужно дождаться разрешения обещания и , а затем вызвать следующую функцию по порядку.

a.build().then( x => x.getBuchungsquelle() )
2 голосов
/ 21 мая 2019

Это не работает, потому что ваша функция Async.

Вы на самом деле не возвращаете экземпляр MSSQLConnectionObject, а экземпляр Promise<MSSQLConnectionObject>.

Асинхронная цепочка:

Посмотрите этот пост Stackoverflow , чтобы получить хороший пример асинхронной цепочки!

...