クライアントは、同じ Web ページ内の 2 つのテーブルまたはリストに提供される動的な情報を要求します。たとえば、2 つのオブジェクトまたは記事を比較するとします。
翡翠のテンプレート
extends layout.jade
block content1
div= foo_table
block content2
div= bar_table
データベースクエリ
var table1 = db.query('select * from table where ...')
.then(function (result){
console.log(result);
});
var table2 = db.query('select * from table where ...')
.then(function (result){
console.log(result);
});
//I DON'T WANT TO SEND TO CONSOLE, JUST GET THE DATA, BUT IT IS ASYNCHRONOUS
console.logの代わりにreturnを使用しても、データのセットは返されません。
.then(function (result){
return(result);
});
No variable defined inside then() is persistent.
ルーターコード
この方法を使用すると機能しますが...:
router.get('/', function(req, res, next) {
db.query('select * from table where ...')
.then(function (result){
res.send(result);
});
問題は、1 つのクエリしか処理できないことです。
2 つのブロックを同時に提供したい:
router.get('/', function(req, res, next) {
res.render('./index', { foo_table: table1, bar_table: table2});
};
私が得る唯一の考えはconsole.logですが、クエリの結果をテンプレートに渡す方法はありません( varテーブルはクエリの結果を保存しません)。
「then」または非同期関数内で作成した変数は永続的ではありません。
JSON.stringify または parse は、これらのネストされた関数の結果を変換しません。
テンプレート変数定義 (footable: *、bartable: *) の後で関数をコールバックしたり、関数を作成したりしても機能しません。
クエリは thenable であるため、保存可能なものに変換する方法を見つけることができません。代わりに、さまざまな thenable クエリから結果を収集して、最終的な情報を提供し、テンプレート変数をレンダリングします。
ページが読み込まれるときに、テーブルごとに個別の AJAX メソッドを作成する必要がありますか?
最初から get メソッドでページ全体を提供したい。