如何在Node.js上等待msSQLdb响应

问题描述

我正在说明我需要“ res.send()” sqldb响应。问题是我的数据库发送响应太晚了。
这是我当前的解决方案:

var sqlres;
function sqldb(sqlquery){

    sql.connect(config,function (err) {

        if (err) console.log(err);
        var request = new sql.Request();

        request.query(sqlquery,function (err,recordset) {
            if (err) console.log(err)
            sqlres = recordset.recordset;
        });
    });
}

app.get('/db',function (req,res) {
    sqldb('SELECT * from dbo.pontos');

    const timeoutObj = setTimeout(() => {
        res.send(sqlres);
    },1500);


});

如果我删除“ setTimeout”,这是我第一次加载时得到的: image
这是上面代码的第二次运行/结果:result

解决方法

您在此情况下使用回调,因此您需要将回调传递给sqldb()函数。所以

var sqlres;
function sqldb(SQLquery,cb){

    sql.connect(config,function (err) {

        if (err) console.log(err);
        var request = new sql.Request();

        request.query(SQLquery,function (err,recordset) {
            if (err) console.log(err)
            sqlres = recordset.recordset;
            cb(sqlres)
        });
    });
}

app.get('/db',function (req,res) {
    sqldb('SELECT * from dbo.pontos',(sqlres) => {
        res.send(sqlres);
    });
});