Angular服务等待数据库连接

时间:2018-06-05 17:37:40

标签: angularjs node.js

我在使用node 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 个答案:

答案 0 :(得分:0)

查看NPM MSSQL上的示例 试试这种方法:

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

答案 1 :(得分:0)

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