2016-12-22 5 views
0

Verzeihen Sie mir, das wird ein wenig ungeschickt formuliert, wie ich versuche, mein genaues Problem zu erklären.Einstellung State mesises mit Promise

Ich habe eine Funktion, die ich ein Versprechen zurückgeben. Ich tue das, weil ich habe einige Asynchron-Code zu verwenden, und wollen sicherstellen, dass ich den richtigen Booleschen Wert zurückkehre

Ich benutze:

return new Promise(function (resolve, reject) { 

entweder aufzulösen oder das Versprechen ablehnen basiert weg von dem, was ich findet in der Schleife, die ich durchmachen .. Dies ist dann, wie nenne ich bestimmte Funktion .., in dem ich nenne „Testfunktion“

testFunction() 
      .then(function() { alert('Yes'); 

      }) 
      .catch(function() { alert('No'); 
      }); 

das alles .. funktioniert gut, wenn es sie alarmiert Ja löst, wenn es warnt nicht No ...

Ich brauche aber die Ergebnisse dieser irgendwie zu speichern, so habe ich versucht, wie dies so zu tun, um den Zustand mit:

testFunction() 
      .then(function() { alert('Yes'); 
       this.setState({ 
       value: true 
       }) 

      }) 
      .catch(function() { alert('No'); 
      }); 

Im Grunde nur einfach den Zustand mit true, wenn das Versprechen löst. Allerdings Wenn ich das tue, wird die .Catch-Funktion auch so ausgeführt, als ob das Versprechen nicht auflösen würde.

Ich gehe davon aus, dass dies eine Art Eigentum des Staates ist? Ich kann nicht wirklich herausfinden, warum das so funktionieren würde. Gibt es dafür eine Lösung? Vielen Dank!

+2

Ihr erster Fehler ist, dass Sie mit 'this.setState' in einem nicht-Pfeil-Funktion. Das ist nicht das, was du denkst. – m0meni

+0

was erwarten Sie 'this', welches Objekt versuchen Sie' setState' on - Ihren Code zu verwenden, so ist 'this' entweder undefiniert oder das' window' Objekt - von denen keiner 'setState' hat Methode, wenn Sie Ihren Haken in '.catch (function (e) {console.log (e);}) ändern;' sollten Sie sehen, was der Fehler in Ihrem Browser ist Entwickler-Tools-Konsole –

+0

@JaromandaX dies ist markiert native 'so nehme ich eine React-Komponente – m0meni

Antwort

0

@FuzzyTree ist richtig. Ich wollte nur hinzufügen, dass Sie auch können Sie Funktionen Pfeil, die nie ihren Ausführungskontext binden:

testFunction() 
.then(() => { 
    alert('Yes'); 
    this.setState({value: true}); 
}).catch(() => { 
    alert('No'); 
}); 

Ein Pfeil Funktion Ausdruck hat eine kürzere Syntax im Vergleich zu Funktionsausdrücken und bindet nicht sein eigen diese Argumente, Super oder New.target. Pfeilfunktionen sind immer anonym. Diese Funktionsausdrücke sind am besten für Nicht-Methodenfunktionen geeignet und können nicht als Konstruktoren verwendet werden.

Sie können mehr über Pfeil-Funktion eingelesen MDN site