Как подключиться к серверу mssql синхронно в node.js - PullRequest
0 голосов
/ 09 апреля 2019

Все примеры использования клиентского пакета / утомительного драйвера mssql предназначены для асинхронных / обратных вызовов / обещаний, но я только разрабатываю микросервис, который будет иметь ограниченное применение, и мое понимание асинхронных функций все еще немного нечетко. Вот что я пытаюсь использовать async / await:

Класс генерации отчета:

    const mssql = require('mssql');
    const events = require('events');
    class reporter {
        constructor(searcher, logger) {
            // Pass in search type and value or log the error of none defined
            this.lg = logger
            if (searcher.type && searcher.content) {
                this.lg.lg("reporter created", 3)
                this.srchType = searcher.type;
                this.srchContent = searcher.content;
            } else {
                this.lg.lg("!MISSING SEARCH PARAMETERS", 0);
                this.err = "!MISSING SEARCH PARAMETERS";
            }
        }
        proc() {
            //DB Connect async
            async () => {
                try {
                    await mssql.connect('mssql://username:password@localhost/database')
                    this.result = await mssql.query`select * from mytable where id = ${this.searcher}`
                } catch (err) {
                    // ... error checks
                }
            }
            return this.result;
        }

    }

Затем позвонил:

    //Pass to reporter for resolution
    var report1 = new reporter(searcher, logs);

    report1.proc();

Я уверен, что это, вероятно, довольно плохой способ сделать это, поэтому я также открыт для любых предложений о хороших способах достижения конечной цели, но я все же хотел бы знать, возможно ли это сделать синхронно .

1 Ответ

1 голос
/ 09 апреля 2019

Вы не можете сделать это синхронно.Разобраться в этом асинхронном материале определенно стоит вашего времени и усилий.

async / await / promises позволяет вам более или менее поддельно делать это синхронно

const report1 = new reporter(searcher, logs);
report1.proc()
.then ( result => {
    /* in this function, "result" is what your async function returned */
    /* do res.send() here if you're in express */
} )
.catch ( error => {
    /* your lookup failed */
    /* inform the client of your web service about the failure
     * in an appropriate way. */
} )

И, разверните асинхронную функциюв вашей функции proc, например, так:

    async proc() {
            try {
                await mssql.connect('mssql://username:password@localhost/database')
                this.result = await mssql.query`select * from mytable where id = ${this.searcher}`
            } catch (err) {
                // ... error checks
            }
        return this.result;
    }

await и .then аналогичны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...