2017-02-21 7 views
0

私は角を使って作業しています。私は以下の機能を持っています。JSでコードの冗長性を減らす[Angular JS]

機能1つの

vm.getInfo = function() { 
     var infoKey = "INFO1"; 
     var url = "www.example.com" + InfoKey; 
     return datacontext.getData(url) 
      .then(function (response) { 
       return vm.infoResponse = response.data.texts; 
      }); 
    } 
    vm.getInfo(); 

 vm.getDetails = function() { 
     var infoKey = "INFO2"; 
     var url = "www.example.com" + InfoKey; 
     return datacontext.getData(url) 
      .then(function (response) { 
       return vm.detailsResponse = response.data.texts; 
      }); 
    } 
    vm.getDetails(); 

両方の上記の機能は、同様の挙動を有する機能が、唯一infoKeyおよび戻り値が変化します。今私はこのような関数を書いています。これは非常にばかげて聞こえるかもしれませんが、どのようにコードの冗長性を減らすためにこの関数を最適化できますか?

+1

関数の変数*(例: 'infoKey')a *パラメータ*を変更します。関数内ではなく、* callsite *で 'vm.x'に代入するなどの操作を実行することを検討してください。 –

答えて

0

infoKeyを受け入れ、コールバック関数でresponse.data.textsとHandelだけを返す共通の関数を作成します。

+0

関数getDetails(InfoKey){ var url = "www.example.com" + InfoKey; return datacontext.getData(url) .then(function(response){ return response.data.texts; }); } –

+0

あなたの答えを編集してモレノの情報を提供することができます。コメントはコードにとって良い場所ではありません。 –

0

あなたは物事を以下試すことができます -

1)response.data.textsパラメータ&リターンとしてinfoKeyをゲット -

function get(infoKey) { 
    var url = "www.example.com" + InfoKey; 
    return datacontext.getData(url) 
     .then(function (response) { 
      return response.data.texts; 
     }); 
} 

2)応答を処理するためのパラメータとして呼び出し可能な関数を渡す -

function get(infoKey, handleResponse) { 
    var url = "www.example.com" + InfoKey; 
    return datacontext.getData(url) 
     .then(handleResponse); 
} 

使い方このように -

あなたは、単にGETINFO関数にコールバックを送信し、そこにそれを扱うことができ、

getInfo(infoKey).then((response)=> { 
       vm.detailsResponse = response.data.texts; 
      },(err)=>{ 
       //Handle errors here. 
      }); 

または:0

get('Infokey1', function onResponse(response) { 
    vm.infoResponse = response.data.texts; 
}) 
+0

'handleResponse'を' then'に直接渡すことができます。別の機能は必要ありません。 –

+0

そう、できます –

0
function getInfo(infoKey) { 
    var url = "www.example.com" + infoKey; 
    var promise = datacontext.getData(url); 
    return promise; 
} 

呼び出す機能のような何かを行う必要があります。

0
vm.getDetails = function (infoKey) { 
    var url = "www.example.com" + infoKey; 
    return datacontext.getData(url) 
     .then(function (response) { 
      if(infoKey=="INFO1"){return vm.infoResponse = response.data.texts;} 
      else{ return vm.detailsResponse = response.data.texts;} 
     }); 
} 
vm.getDetails(infoKey); 

願っています。

関連する問題