异步而不是连接 - 我在欺骗吗?

时间:2016-02-08 10:27:32

标签: postgresql express knex.js

我一直在尝试使用postgres中的json_agg复制这个异步并行查询集。

在我心里,虽然异步方法让我得到了我想要的结果,但我觉得这是作弊,将来会让我感到痛苦。

下面我列出了当前实施的结果。我怎么能用json_agg实现同样的目标呢?

快速路线

router.get('/', function(req, res) {


  async.parallel({
      records: function(parCb) {
        var query = knex('records').select('title','id').orderBy(knex.raw('RANDOM()')).limit(5)
        query.then(function(results) {
          parCb(null, results);
        });
      },
      collections: function(parCb) {
        var query = knex('collections').select('name','id').orderBy('name')
        query.then(function(results){
          console.log(results)
          parCb(null, results);
        });
      },
    },
    function(err, results) {
      res.render('index.html', {
        title: 'Welcome',
        data: results
      });
    });

});

输出

{ collection: 
   { id: 31,
     slug: 'BAR',
     name: 'Barker',
     long_name: 'Barker',
     copyright: '',
     description: null,
     notes: '',
     createdAt: Tue Jan 05 2016 16:47:35 GMT+0000 (UTC),
     updatedAt: Tue Jan 05 2016 15:32:55 GMT+0000 (UTC) },
  records: 
   [ { title: 'Whiddon Down: general view, Tawton, South',
       id: 12595 },
     { title: 'STOKE IN TEIGNHEAD', id: 13937 },
     { title: 'Teign Estuary', id: 104573 },
     { title: 'Lydford Village', id: 106650 },
     { title: 'Metheral hut circle before submersion by Fernworthy Reservoir',
       id: 1467 } ] }

1 个答案:

答案 0 :(得分:1)

首先,不要混合异步库和承诺。这可以避免不必要的痛苦。

如果您使用的其中一个库基于承诺(如knex),我建议您抛弃异步,使用正确的承诺库(像Bluebird一样)并使用它。

var Promise = require('bluebird');
var knex = require('knex');
var express = require('express');
var router = express.Router();

router.get('/', function(req, res) {
  Promise.all([
    knex('records').select('title','id').orderBy(knex.raw('RANDOM()')).limit(5),
    knex('collections').select('name','id').orderBy('name')
  ]).then(function (results) {
    res.render('index.html', {
      title: 'Welcome',
      data: {
        records: results[0],
        collections: results[1]
      }
    });
  });
});

我担心我在这里不能说json_agg