Угловое обслуживание ожидает подключения к базе данных

Programatic спросил: 12 мая 2018 в 03:57 в: angularjs

Я запускаю асинхронную проблему при настройке службы angular базы данных с помощью узла mssql.

По сути, я хочу, чтобы эта служба была центральным местом для запроса из базы данных.

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

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

const sql = require('mssql');userManagerApp.service('SqlService', function() {
    var pool;    var connect = async function() {
        pool = await sql.connect('mssql://user:pass@host/database')
    }
    connect();    var query = async function (query) {
        try {
            var results = await pool.request().query(query).recordset;
            return results;
        } catch (e) {
            console.log(e);
        }
    }    var theService = {
        query : query
    };
    return theService;
});

2 ответа

Michael ответил: 12 мая 2018 в 04:42

Взгляните на пример NPM MSSQLTry:

const sql = require('mssql');userManagerApp.service('SqlService', function() {    var query = async function (query) {
        try {
            let pool = await sql.connect(sqlConfig)
            let result = await pool.request().query(query).recordset
        } catch (e) {
            console.log(e);
        }
    }    var theService = {
        query : query
    };
    return theService;
});
Programatic ответил: 12 мая 2018 в 04:43
Проблема заключается в том, что соединение должно быть прекращено после каждого запроса. Я надеюсь на постоянную связь.
Programatic ответил: 12 мая 2018 в 04:47
На самом деле я могу просто установить глобальную переменную для подключения и рассматривать ее как одноэлементный. Благодаря!
Michael ответил: 12 мая 2018 в 04:50
Ладно, круто. Вы хотите предоставить вам рабочее решение? :)
estus ответил: 12 мая 2018 в 05:25

service используется неправильно, потому что уже есть экземпляр службы this, нет необходимости возвращать новый.

Обещание соединения должно быть сохранено и прикованный во всех методах, которые зависят от него, это общий рецепт (используемый в Mongoose, например):

userManagerApp.service('SqlService', function() {
    this.poolPromise = sql.connect('mssql://user:pass@host/database');
    this.query = async (query) => {
        try {
            const pool = await this.poolPromise;
            const results = await pool.request().query(query).recordset;
            return results;
        } catch (e) {
            console.log(e);
            throw e;
        }
    }
});