2016-10-16 5 views
0

深くネストされたノードのjs関数構造では、コールバックを深層に渡す最も良い方法は何ですか?私はここで約4つの層を持っており、手を抜いて機能シグニチャを汚染し始めています。深くネストされた関数にコールバックを渡すためのベストプラクティス

generic.js

function dumpProcessor(dump, callbacks) { 
    var listing = callbacks.getPropertySelector(dump); 
    callbacks.transformListingToProperty(listing); 
} 

function processDumps(dumps, callbacks){ 
    console.log('process dumps'); 
    dumpProcessor(dumps, callbacks) 
} 

function gotTheDumps(agent, dumps, callbacks){ 
    endDateProperties(agent, function(){ 
     processDumps(dumps, callbacks); 
    }); 
} 

specific.js

function getPropertySelector() {} 
function transformListingToProperty() {} 

var callbacks = { 
    "agent": "agent", 
    "getPropertySelector": getPropertySelector, 
    "transformListingToProperty": transformListingToProperty 
}; 

abc.getDumps("AGENT", generic.gotTheDumps, callbacks); 
+1

あなたはそれがネストされたコールを処理するためのモジュールですasync.jsすることを見てshoud。 – hpfs

+0

コールバックを使用しないでください。約束のために行く。 – Bergi

+0

'callbacks'はなぜオブジェクトなのですか?関数をコールバックとして使用する必要があります。 – Bergi

答えて

0

ここにあなたの問題は、実際には、コールバックではありません。関数パラメータを使用して同じことをいくつか深く渡していることは事実です。コールバック固有の問題ではありません。これは、オブジェクト指向プログラミングが発明された理由の1つです。これは、一般にオブジェクトを使用することで回避されます。多数のメソッドシグネチャで繰り返し表示される関数パラメータは、オブジェクト内のフィールドに変換され、関数は同じオブジェクトのメソッドに変換されます。そして、あなたのすべてのメソッドはそれらのフィールドにアクセスできます。関数の引数として何度も何度も渡す必要はありません。

var dumper = {}; 
dumper.callbacks = callbacks; 

dumper.dumpProcessor = function(dump) { 
    var listing = this.callbacks.getPropertySelector(dump); 
    this.callbacks.transformListingToProperty(listing); 
}; 

はこのようにそれを呼び出す:

dumper.dumpProcessor(someDump); 
関連する問題