如何在node&中获得promise的结果?玉

时间:2017-05-31 07:46:39

标签: javascript node.js express

我是NodeJS和Jade / PUG的新手,所以我知道对于你们许多人来说这可能是一个非常简单的问题,但对我来说,我无法理解任何来自互联网的答案,因为期限'承诺'它是如何工作的有点混乱"为了我。 我正在查询postgre数据库以从表中获取多个值(非常简单的查询)。如果我在不使用promise的情况下执行此操作一切正常,控制台会打印结果并且每个人都很高兴,但是当我尝试将此结果存储到变量中并将其作为参数传递给Jade模板时,事情会发生变化。

我已经读过,为了做到这一点,我需要使用promises,因为更有可能的是,当访问变量时,值可能尚未解析,而Promise的用途是什么。所以这里有我的代码:

hero.js

getHeroes: function()
{
    //Initialize array
    var elem = [];
    console.log('Querying heroes');
    return new Promise((resolve, reject) =>
    {

        pg.connect(conString, function (err, client, done) 
        {
            if (err) 
            {
                return console.error('error fetching client from pool', err)
            }
            //Execute SELECT query
            client.query('SELECT name from heroe;', function (err, rows, result) 
            {
                //Iterate over results
                for (var i = 0; i < rows.rowCount; i++) 
                {
                    //PUSH result into arrays
                    elem.push(rows.rows[i].name);
                }
                done()
                if (err) 
                {
                    return console.error('error happened during query', err)
                }
                resolve(elem)
            })
        });

    })

}

这是我调用该函数的server.js的一部分:

app.get('/jade', (request, response) => {
var heroList = [];
heroList = hero.getHeroes();
console.log(heroList);
response.render('test_jade', {param1: 'test'});
})

console.log显示&#34; Promise {pending}&#34;并且我不知道如何&#34;听取已解决的事件并在完成后检索它的值#34;

非常感谢任何建议/解决方案,甚至是一本优秀的Node.js手册,其中所有这些混乱都是针对像我这样的新手来解释的。

提前致谢!

1 个答案:

答案 0 :(得分:2)

这不是你如何使用诺言。 试试这个,

app.get('/jade', (request, response) => {
    var heroList = [];
    hero.getHeroes().then(data=>{
        heroList = data;
        console.log(heroList);
        response.render('test_jade', {param1: 'test'});
    }).catch(e=>{
        //handle error case here when your promise fails
        console.log(e)
    })
})

如果您的承诺失败,您还应该catch