2017-03-02 9 views
0

あなたはうまくいきますように。ノードjs - プログラムの全体的な構造

ノードJSで非同期プロパティ(初心者...)が指定されているコードの繰り返しを避けるために、論理的にプログラムを構成する方法を理解する必要があります。説明しやすくするために例を挙げてみましょう。 人はmongoデータベースにいくつかのデータを持っています(名前のリストを考えてみましょう)。名前のこのリストは、

function readData(criteriaRead,callback) { 
    mongodb.stuff(..) 
    callback('data read on mongodb') 
} 

以下のように機能て、readDataへのアクセスのおかげですることができ、私は私のプログラムに2つのアクションを持っている:一方が他方の名前がであるかどうかを確認することで、名前のリストをプリントアウトすることですリスト。最初のケースでは は、それは簡単です、私はちょうどこの

function printout(data) {console.log(data)} 

のような機能を持つようにし、第2のケースで、この

readData(criteriaRead,printout) 

を行う必要があり、のは、私はこのような機能を持っているとしましょう

checkIfInIt(array,dataToCheck) {//stuff to check console.log(results)} 

readData(criteriaRead,checkIfInIt)を実行すると、checkIfInItが2つのパラメータを必要とするため、問題が発生します。 私はこの

function readDataBis(criteriaRead,dataToCheck,callback) { 
    mongodb.stuff(..) 
    callback('data read on Mongodb','dataToCheck') 
} 

のような機能を必要とし、その後readDataBis(criteriaRead,dataToCheck,checkIfInIt)は動作しますが、私は私のコードでは、巨大な繰り返しを持っています。

これを回避するにはどうすればよいですか? 、

答えて

0

は、この種の問題のためにいくつかのソリューションがありますが、ここでは

dataToCheckundefinedであるかどうかを確認、

なインサイドなど三つのパラメータを使用して関数を宣言し、あなたのケースのための簡単なものですあなたが持っていた2番目の機能の流れを続けてください。 (そうでない場合は、単に読み取り機能を行う)

はそれが

function readData(callback, params) { ... 

それが単純になるだろう場合にも、このようなあなたのパラメータのオブジェクトに渡すことができますので、

readData(callback, criteriaRead); // Third parameter missing, will be undefined 
readData(callback, criteriaRead, dataToCheck); 

のようにそれらを呼び出し、このように呼び出す

readData(callback, { criteriaRead: criteriaRead, dataToCheck: dataToCheck }); 
+0

第2の解決策は私の場合には完璧です。特に、すべてのデータをd ifコールバック。それは素晴らしいです、ありがとうたくさん –

+0

私は夜にこれについて考えました。コールバック関数でも同じことが可能でしょうか? –

+0

同じことをしますか? –

関連する問題