在对象内的回调中将值从一个方法返回到第二个

Returning value from one method to second in callback within object

我有一个大对象,基本上负责整个转换钱。

在这个对象中我有 4 个方法。

addTaxAndShowBack() 是我的“主要”方法,它将其他方法作为带有某种回调地狱的链执行。

addTaxAndShowBack: function(priceField,selectedCurrency) {
    var that = this;
    var convertedToUSD = this.convertToUSD(priceField,selectedCurrency)
        .then(function(response) {
            console.log(response);
            var priceInUSD = response;
            that.addTax(priceInUSD,selectedCurrency)
                .then(function (response) {

                    console.log(response); // !!! THIS CONSOLE.LOG DOESN'T LOG ANYTHING

                }, function () {
                    console.log('error');
                });

        }, function (response) {
            console.log(response);
        });
},

首先执行的方法 (convertedToUSD()) 工作正常,returns 将货币从用户默认货币转换为美元。第二个是 addTax(),它没有 return 值我想要的值。 console.log(response) 不记录任何内容。 addTax方法的代码是:

addTax: function(priceInUSD, selectedCurrency) {
    var finalPriceInUSD;
    if(priceInUSD<300){
        // i should also store userPriceInUSD in some variable
        // maybe rootScope to send it to backend
        finalPriceInUSD = priceInUSD*1.05;
        console.log('after tax 5%: '+finalPriceInUSD);
        return finalPriceInUSD;
    } else {
        finalPriceInUSD = priceInUSD*1.03;
        console.log('after tax 3%: '+finalPriceInUSD);
        return finalPriceInUSD;
    }
},

我可能在 addTax() 中做错了 return 或在 addTaxAndShowBack() 中没有正确分配我不知道,这就是为什么我需要你的帮助。

return finalPriceInUSD; 这就是第二次回调中 addTaxAndShowBack() 中的 response 应该是什么。

您没有返回承诺。试试这个

addTax: function(priceInUSD, selectedCurrency) {
    var finalPriceInUSD;
    if(priceInUSD<300){
        // i should also store userPriceInUSD in some variable
        // maybe rootScope to send it to backend
        finalPriceInUSD = priceInUSD*1.05;
        console.log('after tax 5%: '+finalPriceInUSD);
        return new Promise(res => { res(finalPriceInUSD) });
    } else {
        finalPriceInUSD = priceInUSD*1.03;
        console.log('after tax 3%: '+finalPriceInUSD);
        return new Promise(res => { res(finalPriceInUSD) });
    }
},