2017-09-03 106 views
0

我有一個包含兩個方法的對象。第一個調用API並將response存儲在變量中。將收集到的API調用中的值從第一個方法傳遞到第二個相同對象中

在第二種方法中,我使用this.nameOfFirstMethod()執行第一個方法,然後我想根據我在第一個方法中的API調用中收集的數字進行一些計算。

爲了更清楚看看代碼,開始在第二種方法閱讀:

this.currencyConverter = { 
    getRatio: function(selectedCurrency) { 
     var selectedCurrency = selectedCurrency; 
     $http({ 
      url: 'http://api.fixer.io/latest?base='+selectedCurrency+'&symbols=PLN,CHF,EUR,USD,GBP', 
      method: 'GET' 
     }) 
     .then(function(response) { 
      var currentCurrency = { 
       toPLN: response.data.rates.PLN, 
       toCHF: response.data.rates.CHF, 
       toEUR: response.data.rates.EUR, 
       toUSD: response.data.rates.USD, 
       toUSD: response.data.rates.GBP 
      }; 
      console.log("Succesful store currentCurrency"); 
      return currentCurrency; 
     }, function(response) { 
      console.log("Problem occure while downloading money current currency!"); 
      console.log(response.data); 
     }); 
    }, 
    convertMoney: function(selectedCurrency,priceField) { 
     var priceField = priceField; 
     var selectedCurrency = selectedCurrency; 

     console.log('selectedCurrency in service: '+selectedCurrency); 
     console.log('priceField in service: '+priceField); 

     this.getRatio(selectedCurrency); 

     console.log(currentCurrency); 

     /* 
     var converted = { 
      PLN: function() { return priceField * $rootScope.currentCurrency.toPLN; }, 
      USD: function() { return priceField * $rootScope.currentCurrency.toUSD; }, 
      EUR: function() { return priceField * $rootScope.currentCurrency.toEUR; }, 
      CHF: function() { return priceField * $rootScope.currentCurrency.toCHF; }, 
      GBP: function() { return priceField * $rootScope.currentCurrency.toGBP; } 
     }; 
     */ 

    } 
} 

下面是相同的代碼GIST如果有人不喜歡StackOverflow的造型: https://gist.github.com/anonymous/e03de4de1af407bf70f4038acd77c961

請打開這個要點,因爲我現在將解釋基於特定線路。

所以在第30行我執行第一個方法。

在第9行中,我將檢索到的數據存儲在變量中,並在第17行中返回此數據(以便在第二種方法中使用它)。

最後我想console.log這在32行的第二個對象(現在只有console.log我以後會做我的數學)。

它不會與此return工作,在第二種方法的原因console.log線以下錯誤:

ReferenceError: currentCurrency is not defined

+0

到'this.getRatio調用(selectedCurrency)'是asyncronous,這意味着下面的代碼不會等待它返回。 – NiVeR

回答

1

你不getRatio的返回值賦值給一個變量 應該

currentCurrency = this.getRatio(selectedCurrency); 

而且您應該正確使用承諾。 所以將其更改爲這樣的事情(未測試)

this.currencyConverter = { 
    getRatio: function(selectedCurrency) { 
     var selectedCurrency = selectedCurrency; 
     return $http({ 
      url: 'http://api.fixer.io/latest?base='+selectedCurrency+'&symbols=PLN,CHF,EUR,USD,GBP', 
      method: 'GET' 
     }) 
     .then(function(response) { 
      var currentCurrency = { 
       toPLN: response.data.rates.PLN, 
       toCHF: response.data.rates.CHF, 
       toEUR: response.data.rates.EUR, 
       toUSD: response.data.rates.USD, 
       toUSD: response.data.rates.GBP 
      }; 
      console.log("Succesful store currentCurrency"); 
      return currentCurrency; 
     }, function(response) { 
      console.log("Problem occure while downloading money current currency!"); 
      console.log(response.data); 
     }); 
    }, 
    convertMoney: function(selectedCurrency,priceField) { 
     var priceField = priceField; 
     var selectedCurrency = selectedCurrency; 

     console.log('selectedCurrency in service: '+selectedCurrency); 
     console.log('priceField in service: '+priceField); 

     var currentCurrency = this.getRatio(selectedCurrency); 
     currentCurrency.then(res => console.log(res)); 

     //console.log(currentCurrency);   

    } 

}

+0

它改變了我的錯誤'TypeError:不能讀屬性'然後'未定義'讓我補充說,這個錯誤在控制檯出現在console.log(「成功的商店currentCurrency」);'看起來像'.then' isn工作不正常。 – BT101

+0

你在第一個函數中添加了返回$ http嗎? – wheeler

相關問題