2016-05-20 7 views
1

私はprocess.nextTick()メソッドの中でたくさんのMongo(mongoose ORM)クエリを見てきました。 nextTickは実行を次の繰り返しに延期することを知っていますが、なぜならthese queries are asynchronous以来、なぜ彼らはそれを使用していますか?なぜmongooseクエリの前にprocess.nextTick()を使用しますか?

例:

process.nextTick(function() { 
    User.findOne({ 'local.email' : email }, function(err, user) { 
     ... 
    }); 
}); 

答えて

3

TL; DR:これは必須、または特に有用ではありません。

hereherehereこのセットアップを使用する一連のPassportチュートリアルがあります。

process.nextTick()の使い方はわかりませんが、これらのチュートリアルはお互いからのコードや共通のソース(私が見つけられなかったコード)を借りているようです。

これらのチュートリアルはGoogleで非常に高いランク付けされているため、Passportのサンプルコードを探しているときに見つけてコピーします。だから、おそらくそれが何とか必要とされているという考え方を強要して、SOの質問にも多く出てくるようです。

+0

私の例はいくつかのパスポートの実装から来ています... –

0

私は、これは高負荷環境に適していると思うしないために、(あなたがmongoDBクエリへのお電話をする前に、自分のプロセッサのタイムスライスを取得するためにnode listen loopの他のインスタンスをしましょう)が長すぎるためのプロセッサを奪う-食べました。

+0

MongoDBのクエリは非同期なので、クエリの結果が返されるまではイベントループに既に出力されるので、実際にはその点は表示されません: ) – robertklep

+0

関数呼び出しスタックが空でない間に、イベントループがyieldされません。つまり、mongoDB非同期パラダイムでコールバック関数を使用すると、イベントが実行されてコールバックから完全に巻き戻されるのを防ぐことができます。 – Thevs

関連する問題