2

ノード内の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

また

複数の並列タスクを実行し、同期コードで結果を返す非同期ライブラリを作成する方法。以下のように、またはそのようなもの

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

2 に答える 2

0

「同期モード」で実行する必要があるかどうか疑問に思います。確立できるフロー制御がいくつかある可能性があり、最悪の場合、NodeJS サーバーに深刻な影響を与える可能性があります。NodeJS のシングル スレッド アーキテクチャのため、現在のアクションが DB を呼び出して戻るまで、他のすべてのイベント/ユーザーを待機させることをお勧めします。これは 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と、2 つのクエリからのデータが入力され、並行して実行されます。他のイベントを完全にブロックすることなく。

于 2014-09-16T15:23:10.550 に答える