gpt4 book ai didi

node.js - 如何在 knex [Node] 中运行同步查询

转载 作者:太空宇宙 更新时间:2023-11-03 22:37:01 25 4
gpt4 key购买 nike

如何在 Node 的 knex 数据库中以同步方式生成结果。 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

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

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

最佳答案

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

从你的问题中我可以看出,像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) 回调时,results 会填充来自两个并行执行的查询的数据。所有这些都不会完全阻止您的其他事件。

关于node.js - 如何在 knex [Node] 中运行同步查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25869861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com