2017-02-21 84 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(); 

功能2

 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')成爲一個參數*。考慮在* callsite *處執行諸如分配給'vm.x'的操作,而不是在函數內部。 –

回答

0

製作一個通用函數,它接受infoKey,然後僅在回調函數中返回response.data.texts和Handel VM變量。

+0

function getDetails(InfoKey){ var url =「www.example.com」+ InfoKey; (函數(響應){ return response.data.texts; });返回datacontext.getData(url) 。 } –

+0

您可以[編輯]您的答案以提供更多信息。評論不是代碼的好地方。 –

0

你可以試試下面的事情 -

1)獲取infoKey作爲參數&回報response.data.texts -

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); 
} 

使用像這樣 -

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; 
} 

調用函數應該這樣做:

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

或者,你可以簡單地發送一個回調到的getInfo功能和處理它。

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); 

希望這對你有所幫助。