1
knexをexpressで使用すると、どのようにしてknexクエリの結果にアクセスできますか?knexクエリの結果にアクセスする方法
例:
var bots = []
response = knex.select('id', 'name').from('robots')
.then(function(robots){
console.log(robots);
bots = robots
});
console.log(bots)
これは、ロボットのログが、空であるbots
配列を更新しないことはありません。
EDIT:同期回避策として
、急行路線で、私はknexブロック内急行ブロックを立ち往生:
router.get('/robots', function (req, res) {
response = knex.select('id', 'name').from('robots').then(function(bots){
res.render('robots/index', {
page_title: 'All Robots',
robots: bots
}); // res.render
}); // knex.select
}); // router.get
が、これは推奨パターンですか?
'then'の関数コールバックは非同期です。基本的には、dbからの結果が利用可能であり、平均時間内にノードがコードを処理し続ける場合に呼び出されます。私はあなたが最初に定義されていない結果を最初にターミナルに着くことに気づかなければならないと思います。 – Molda
私は 'knex'アクション/クエリを変数(あなたの場合は' response')に設定しません。 'knex'はPromiseベースなので、' then() 'コンポーネント内で変数を実行して設定します(エラーの場合は' catch() ')。 変数 'response'を使いたいのであれば、' knex'データベースクエリの前に 'var response'を設定し、その後に' then() 'の中に' response'を設定します'knex'クエリの結果からあなたが望むものは何でも。 – kuanb