2017-10-17 10 views
0

J'ai un gros objet qui est responsable de la conversion de l'argent.Renvoi d'une méthode à une seconde en rappel dans l'objet

Dans cet objet, j'ai 4 méthodes.

addTaxAndShowBack() est ma méthode "principale" et elle exécute les autres en tant que chaîne avec une sorte de rappel de l'enfer.

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

Première méthode exécutée (convertedToUSD()) fonctionne bien, il retourne l'argent converti de la monnaie par défaut utilisateur à USD. Le deuxième est addTax() et il ne retourne pas la valeur que je voudrais. Le console.log(response) n'enregistre rien. Le code de la méthode addTax est:

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

Je suis probablement faire quelque chose de mal à ne pas retourner addTax() correctement ou ne pas attribuer correctement dans addTaxAndShowBack() Je ne sais pas et c'est pourquoi j'ai besoin de votre aide.

return finalPriceInUSD; est ce que response dans dans le deuxième rappel devrait être.

Répondre

1

Vous ne renvoyez pas une promesse. Essayez ceci

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