2017-09-04 3 views
-1

Bonjour J'ai un objet qui contient peu de méthodes. Dans l'un d'entre eux, j'utilise la promesse d'en exécuter une autre et j'utilise .then pour récupérer des données.Méthode d'appel de la promesse

Dans .then mon mot-clé this est modifié et je n'arrive pas à comprendre comment appeler à nouveau une autre méthode à partir de ce point.

donc la méthode que je vous écris au sujet est:

convertToUSD: 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(function(response) { 
      console.log(response); 
      console.log('to USD: '+response.toUSD); 
      if(response.toUSD !== undefined){ 
       var userPriceInUSD = priceField*response.toUSD; 
       console.log(userPriceInUSD); 
       this.addTax(userPriceInUSD); 
      }; 
     }); 

    }, 

dans la déclaration if() que je fais un calcul simple et je veux passer le résultat à la méthode addTax() (dans le même objet), mais this mot-clé ne fonctionne pas comme prévu dans ce cas, alors comment puis-je commencer une autre méthode à ce stade? Et la question moins importante - est-ce que c'est ce que je fais nommé chaînage?

+2

Solution 1 - utiliser une fonction de flèche '.alors ((réponse) => {' - solution deux, sauvegardez une référence à ceci, dites dans 'var _this = this;' en dehors de cette fonction .then, et utilisez _this dedans –

+0

https://stackoverflow.com/questions/34930771/why-is-this-undefined- inside-class-method-when-using-promises – Donal

+0

Je savais qu'il y avait un dupe: p –

Répondre

0

vous pouvez stocker le contexte de ce fait que, utilisez cette nouvelle variable qui pour effectuer des opérations

convertToUSD: function(selectedCurrency,priceField) { 
     var priceField = priceField; 
     var selectedCurrency = selectedCurrency; 

     console.log('selectedCurrency in service: '+selectedCurrency); 
     console.log('priceField in service: '+priceField); 
     var that = this; // this stores the context of this in that 
     var currentCurrency = this.getRatio(selectedCurrency); 
     currentCurrency.then(function(response) { 
      console.log(response); 
      console.log('to USD: '+response.toUSD); 
      if(response.toUSD !== undefined){ 
       var userPriceInUSD = priceField*response.toUSD; 
       console.log(userPriceInUSD); 
       that.addTax(userPriceInUSD); 
      }; 
     }); 

    },