2012-01-10 21 views
2

特別な場合は、「require」のように、実行をブロックしてより簡単にすることが理にかなっています。Node.JSのデータベースに接続

私は似たような場合があります。DB接続をブロックする方法が必要です。 そして、アプリケーションが開始され、後で再利用するためにグローバルオブジェクトに保存されたときに一度だけ発生するため、パフォーマンスには影響しません。

問題:

  1. ノードが 'スリープ' メソッドを持っていません。
  2. イベントループにはいくつかトリッキーがありますが、ブロックする必要がありますが、同時にデータベース接続の処理を行うことができます。

実際に私はすでにジャスミン・ノードからwaitForを使用することによって、それをやったが、私はそれのソースを見たとき - それは非常に複雑だとphantomjs C-の拡張機能を使用しています。

そして悲しいことに、簡単なwhile(true){...}ものは動作しません。たとえば、以下のコードは動作しません。イベントループをブロックし、ノードが待機するイベント(シングルスレッド環境のデッドロックの種類:)をノードで処理できないためです)。

waitsFor = (fun, message = "waitsFor timeout!", timeout = 1000) -> 
    start = new Date().getTime() 
    while true  
     if fun() 
     break 
     else if (new Date().getTime() - start) > timeout 
     throw new Error(message) 

しかし、多分それは余分なphantomjsのような依存関係や複雑なC-拡張せずに、他のいくつかの簡単な方法でそれを行うには何とか可能ですか?

+0

データベース接続が確立されるまでアプリを起動するのはなぜですか? 'db.connect(function(err){... start app here ...});' –

+3

"グローバルオブジェクトに保存して後で再利用できるようになりました。 –

答えて

4

アプリケーションは、まず非同期的にデータベースに接続し、接続が使用可能になるとその処理ロジックに進みます。例:

db.connect(function(conn, err) { 
    if (err) throw err; 
    // Put your program logic using the db connection here... 
}); 
+2

+1、OPはNodeJSを明示的に使用するつもりではないように見えます。通常は長いブロッキングコールは非同期で行う必要があります(DBアクセス、ファイルアクセスなど) –

関連する問題