Lösen Sie JavaScript Promise außerhalb des Funktionsumfangs auf
Ich habe mit ES6 Versprechen.
Normalerweise ein Versprechen ist gebaut und genutzt, wie dies
new Promise(function(resolve, reject){
if (someCondition){
resolve();
} else {
reject();
}
});
Aber ich habe dabei so etwas wie unten nehmen beheben außerhalb aus Gründen der Flexibilität.
var outsideResolve;
var outsideReject;
new Promise(function(resolve, reject) {
outsideResolve = resolve;
outsideReject = reject;
});
Und später
onClick = function(){
outsideResolve();
}
Dies funktioniert gut, aber es ist ein einfacher Weg, dies zu tun? Wenn nicht, ist das eine gute Praxis?
InformationsquelleAutor der Frage Morio | 2014-10-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, es gibt keinen anderen Weg, dies zu tun - das einzige was ich sagen kann ist, dass dieser Anwendungsfall ist nicht sehr Häufig. Wie Felix sagte in der Kommentar - was Sie tun wird konsequent arbeiten.
Es ist erwähnenswert, dass der Grund, das Versprechen Konstruktor verhält sich dieser Weg werfen Sicherheit - wenn eine Ausnahme nicht geplant passiert, während Ihr code ausgeführt wird, innerhalb der promise-Konstruktor wird daraus eine Ablehnung, die diese form der Sicherheit werfen - converting-Fehler geworfen zu Ablehnungen ist wichtig und hilft bei der Erhaltung vorhersagbaren code.
Für das werfen der Sicherheit Grund, das Versprechen Konstruktor gewählt wurde, über deferreds (die eine alternative Versprechen Konstruktion so, dass tun lassen, was Sie tun) - wie für "best practices" - ich würde übergeben Sie das element und verwenden Sie die Versprechen Konstruktor statt:
Deshalb - Wann immer Sie kann Verwendung des promise-Konstruktor über den Export die Funktionen - ich empfehle Ihnen, verwenden Sie es zu tun. Wann immer Sie können, vermeiden, - vermeiden und Kette.
Beachten Sie, dass Sie sollten verwenden Sie niemals das Versprechen Konstruktor für Dinge wie
if(condition)
das erste Beispiel könnte auch geschrieben werden als:InformationsquelleAutor der Antwort Benjamin Gruenbaum
einfach:
InformationsquelleAutor der Antwort carter
Wenig spät zur party hier, aber einen anderen Weg, es zu tun wäre, um eine Latente Objekt. Sie müssen im wesentlichen die gleiche Menge an boilerplate, aber es ist praktisch, wenn Sie möchten, übergeben Sie herum und möglicherweise zu lösen, die außerhalb Ihrer definition.
Naive Implementierung:
ES5 Version:
InformationsquelleAutor der Antwort Jon Jaques
Einer Lösung kam ich mit im Jahr 2015 für meine Rahmen. Ich rief diese Art von Versprechungen Aufgabe
InformationsquelleAutor der Antwort Maxmaxmaximus
Ein-Helfer-Methode lindern würde dies zusätzlichen Aufwand, und geben Sie die gleiche jQuery fühlen.
Verwendung wäre
Ähnlich zu jQuery
Obwohl, in einem Fall verwenden Sie diese einfache, native syntax ist in Ordnung
InformationsquelleAutor der Antwort Cory Danielson
Unsere Lösung zu nutzen, um die Verschlüsse zu speichern beheben/reject Funktionen und zusätzlich befestigen, eine Funktion zu erweitern, das Versprechen selbst.
Hier ist das Muster:
Und die, die es verwenden:
InformationsquelleAutor der Antwort Steven Spungin