Node.js Express Asyn / await

时间:2018-04-19 18:40:47

标签: node.js express asynchronous async-await

好吧,我不完全确定我做错了什么。

我必须做多个SQL查询,我真的不希望它们全部嵌套在一起。所以我正在尝试使用Async / Await,以便我可以将我的查询称为函数。

问题是,看起来我的功能在它继续之前没有完成,尽管我已经在前面写了等待。

如果我尝试调用“test”函数,它会将字符串“text”返回给控制台日志。

我还尝试在“get_all_events”函数前添加“async”。

我希望有人可以帮助我

const db_connection = require('../../helpers/db/db_config.js').connect_local()

module.exports = function (server) {
    server.get('/events', async function(req, res, next) {
            try {
                var event_data = await get_all_events()
                console.log("Try Catch CL: ", event_data)

                res.render('public assets/pages/events', {
                    event_data  : event_data
                });

            } catch (error) {

            }      
        }
    );
}
function test(){
    return "test"
}
function get_all_events () {
    let sql_get_all_events = `
        SELECT event_id, event_name, event_text, event_dateStart, event_dateEnd, event_imagePath, type_id, type_name, type_text, type_imagePath, type_color,seating_id
        FROM 
            ((tb_events 
        INNER JOIN 
            tb_event_types ON type_id = fk_event_type)
        INNER JOIN 
            tb_seating ON seating_id = fk_seating)`



    db_connection.query(sql_get_all_events, function (error, event_data) {
        if (error) 
            throw(error)
        else
            return event_data
    });
}

2 个答案:

答案 0 :(得分:0)

Async / await仅在您返回承诺时有效。

db_connection.query(sql_get_all_events, function (error, event_data) {
    if (error) 
        throw(error)
    else
        return Promise.resolve(event_data)
});

看看是否有效。

答案 1 :(得分:0)

您需要从Promise函数返回get_all_events()才能await

function get_all_events() {
    let sql_get_all_events = `...`;

    return new Promise((resolve, reject) => {
        db_connection.query(sql_get_all_events, function (error, event_data) {
            if (error) {
                return reject(error);
            }

            resolve(event_data);
        });
    })
}
相关问题