我有一个包含两个方法的对象。第一个是调用API并将response
存储在变量中。
在第二种方法中,我使用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; }
};
*/
}
}
如果有人不喜欢StackOverflow样式,那么这是相同代码的GIST: https://gist.github.com/anonymous/e03de4de1af407bf70f4038acd77c961
请打开这个要点,因为我现在将根据具体的行进行解释。
所以在第30行我执行第一个方法。
在第9行中,我将检索到的数据存储在变量中,并在第17行中返回此数据(为了在第二种方法中使用它)。
最后,我想在第32行的第二个对象中console.log
这个(现在只有console.log
我稍后会做数学运算。)
它不适用于此return
,第二种方法中带有console.log
的行会导致以下错误:
ReferenceError:currentCurrency未定义
答案 0 :(得分: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);
}
}