我是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手册,其中所有这些混乱都是针对像我这样的新手来解释的。
提前致谢!
答案 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
。