0

node.js アプリケーションを作成しようとしていますが、それを本番環境にデプロイする必要があります。

クエリやデータベースサーバーへのアクセスなど、長時間実行されるプロセス/操作がある場合、node.js がハングしないようにする必要があります。

そのため、終了までに非常に長い時間がかかるmongoまたはファイルシステムへの呼び出しを試みているため、他のnode.jsサーバーが他の要求を自由に処理できることを確認できます。

悲しいことに、mongo が終了するまで、またはファイル システムへの同期呼び出しを行うのに非常に長い時間がかかるレコードを挿入することはできません。

誰かがそれを行う方法を教えてもらえますか?

ありがとう

トゥコ

4

1 に答える 1

0

秘訣は、呼び出しを行うブロックの後にデータのコンソールログを作成し、コンソールで最初にメッセージが実際に非同期である場合は、コールバックで console.log を作成することです

mongoのドライバーとしてmongojsを使用しています:

collection.find({}, function(err, res) {
    console.log("done")
});
console.log("sendign signal")

非同期の場合、コンソールで:

sendign signal
done! 

連鎖した動作のために、そのようなものを作ることができます

dbChain = (function() {
  var chain = [], cursor = 0, busy = false;

  chainin = {
    push : function(aFn) {
      if(!busy) {
        chainin.reset();
        aFn();
        busy = true;
      } else {
        chain.push(aFn)
      }
    },

    next : function() {
      cursor++;
      if(chain[cursor]) {
        chain[cursor]();
      } else {
        chainin.reset();
      }

    },

    reset : function() {
      chain = [];
      cursor = 0;
      busy = false;
    }
  }

  return chainin;

})()

そして、あなたがしなければならないすべてのdb呼び出しで:

dbChain.push(...(a function ) ...)

すべてのコールバックで

dbChain.next()
于 2012-12-31T01:09:43.090 に答える