私はNodeJSとJade/PUGを初めて使うので、これはあなたの多くにとって本当に簡単な質問かもしれませんが、私にとっては、 「プロミス」という言葉とそれがどのように機能するのかは、私にとって少し「混乱している」ため、インターネットからの回答が得られます。 私は、テーブルからいくつかの値を得るためにpostgreデータベースに問い合わせています(本当に単純なクエリ)。私が約束を使わずにこれを行うと、コンソールが結果を出力し、誰もが満足しています。しかし、この結果を変数に格納して、それをJadeテンプレートのパラメータとして渡すと、変化します。ノード&ジェイドで約束の結果を得るにはどうすればいいですか
これを実行するには、変数にアクセスしているときに値がまだ解決されていない可能性があり、それが約束を使用している可能性が高いということを読んでいます。だからここに私は私のコードを持っている:
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 「Promise {pending}」と表示され、解決済みのイベントを聞いて、それが終了したら値を取得する方法がわかりません。
アドバイス/解決策、あるいはNode.jsのマニュアルもありがとうございました。私のような全面的な初心者のためにこのすべての混乱が説明されています。
ありがとうございます!
くそー!それは私が探していたものです。「それから」「約束がいつ解決されたかを教えてください」私は私の質問で話していましたが、素早く答えていただきありがとうございましたanuragasaurus。私はプロミスが解決するのを待って玉のビューをロードするとNodeJSの "非同期の精神"に違反していますか? – Ejher
@エージャーあなたの疑問は何ですか? – nrgwsth
私はイントロを前に押しましたプロミスが解決するのを待ってから、玉のビューを読み込むと、NodeJSの "非同期の精神"に違反していますか? " – Ejher