用Promise返回多个查询

时间:2018-07-27 16:05:27

标签: javascript node.js postgresql express promise

我尝试在一个对象上封装两个查询响应,然后在函数return上使用该对象

app.get('/gerais',(req,res) => {
    const client = new Client();
    const data = new Object();
    client.connect()
        .then(() => {
            data.result1 = client.query('SELECT * FROM student');
            data.result2 = client.query('SELECT * FROM adress');

            return data;
        })
        .then((results) => {
            console.log('results?',results);
            res.render('geral-info',results);
        });
});

但在终端打印中显示“结果”:

results? { result1: Promise { <pending> }, result2: Promise { <pending> } }

如何进行调整,以便可以用每次查询中返回的实际字符串填充此“​​待处理”?

1 个答案:

答案 0 :(得分:2)

client.query()返回一个Promise,而不是查询结果。因此,您需要知道该承诺何时达成,以便从承诺中获取数据。

如果您有两个承诺(您要执行),并且想知道它们都在何时完成,则可以使用Promise.all()。当其他两个promise都解决时,这将返回一个新的promise,该promise将解析为结果数组:

client.connect()
    .then(() => {
        return Promise.all([client.query('SELECT * FROM student'), client.query('SELECT * FROM adress')])
    })
    .then((results) => {
        console.log('results?',results);
        // res.render('geral-info',{something from the results});
    });