将API调用中的聚集值从第一种方法传递到同一对象中的第二种方法

时间:2017-09-03 18:42:21

标签: javascript angularjs oop parameter-passing

我有一个包含两个方法的对象。第一个是调用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未定义

1 个答案:

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

    }

}