如何在knex中运行同步查询

如何在节点中的knex db中以同步方式导致结果。 http://knexjs.org/#Promises-then

knex.select('*').from('users').where({name: 'Tim'}) .then(function(id) { console.log('Inserted Account ' + id); }) 

我想要这样的东西

 knex.select('*').from('users').where({name: 'Tim'}) .sync().then(function(id) { console.log('Inserted Account ' + id); }); // code should not continue to run until completing then function 

要么

如何使asynchronous库运行多个并行任务并返回同步代码中的结果。 像下面或类似的东西

  var results=async.sync().parallel([ task1,task2 ],function(err, res){ results=res; }); // anything like var results or sync() console.log(results); 

我会质疑你需要在“同步模式”下运行的东西。 有可能会build立一些stream量控制,最坏的情况是可能会严重影响您的NodeJS服务器。 由于NodeJS的单线程架构,你所build议的是让所有其他事件/用户等待,直到当前操作调用数据库并返回。 这不是一个很好的使用NodeJS。

从我的问题可以看出,像async.parallel这样的async.parallel应该适合你。

 async.parallel({ queryone: function( parCb ){ var query = knex('users').select().where( 'name', 'Tim' ); query.exec( function(err, results ) { parCb( err, results ); } ); }, querytwo: function( parCb ){ var query = knex('otherTable').select().where( 'name', 'Tim' ); query.exec( function(err, results ) { parCb( err, results ); } ); }, }, function(err, results) { //Results are all ready, containing the results of two different queries console.log( 'Results for queryone: ' + JSON.stringify( results.queryone ) ); console.log( 'Results for querytwo: ' + JSON.stringify( results.querytwo ) ); }); 

在这里,当你到达function(err,results)callbackfunction(err,results)时, results会被两个查询中的数据填充,并行执行。 没有完全阻止你的其他事件。