2017-09-04 3 views
-1

Hallo Ich habe ein Objekt, das wenige Methoden enthält. In einem von ihnen verwende ich Versprechen, einen anderen auszuführen, und ich verwende .then, um einige Daten von ihm abzurufen.Aufruf Methode von Versprechen

Innerhalb .then mein this Schlüsselwort ist geändert und ich kann nicht herausfinden, wie man eine andere Methode von diesem Punkt wieder aufruft.

So ist die Methode über die ich schreibe, ist:

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

    }, 

innerhalb if() Aussage Ich bin eine einfache Berechnung zu tun und dann möchte ich das Ergebnis addTax() Methode zu übergeben (im gleichen Objekt), aber this Das Schlüsselwort funktioniert in diesem Fall nicht wie erwartet. Wie kann ich an dieser Stelle eine andere Methode starten? Und weniger wichtige Frage - ist das, was ich mache, genannt Verkettung?

+2

Lösung zu tun - einen Pfeil Funktion '.then ((Antwort) => {' - Lösung 2, speichern Sie einen Verweis darauf, sagen Sie in 'var _this = this;' außerhalb dieser .then Funktion, und verwenden Sie _dies darin –

+0

https://StackOverflow.com/questions/34930771/why-is-this-undefined- Insider-Klasse-Methode-wenn-mit-Versprechen – Donal

+0

wusste, es war ein Betrogener: p –

Antwort

0

können Sie den Kontext dies, dass speichern, verwenden Sie dann diese neue Variable dass Operationen 1

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

    },