2016-05-06 15 views
0

Ich habe eine asynchrone Funktion, die eine Zusage zurückgibt. Die Operation sollte nur einmal ausgeführt werden. Ich möchte alle Anrufer dieser Funktion die gleichen Versprechen zurück zu bekommen, aber ich will nicht .catch() es von einem Anrufer einer anderen Anrufer beeinflussen. Kann ich ein Versprechen klonen oder auf andere Weise implementieren?Kann ich ein Versprechen klonen?

+0

Mögliches Duplikat [memoization verheißungs-basierte Funktion] (http://stackoverflow.com/q/28763057/1048572)? – Bergi

Antwort

1

aber ich möchte nicht .catch() es eines Anrufers auf einen anderen Anrufer auswirken.

Sie nie tun (es sei denn Sie die Rückrufe gekettet haben, die Sie nicht).

Ich möchte alle Anrufer dieser Funktion die gleichen Versprechen zurück zu bekommen

Just do it. Versprechen sind unveränderliche Werte .

Kann ich ein Versprechen klonen?

Wenn Sie wirklich ein deutliches Objekt benötigen, die das ursprüngliche Versprechen folgen werden (dann erfüllen, wenn ich erfüllt oder ablehnen, wenn es ablehnt), können Sie die then Methode ohne Argumente verwenden:

var clone = promise.then(); 
console.assert(clone !== promise); 

1: Angenommen, Sie verwenden eine geeignete Verheißungsbibliothek. Ich denke, ich erinnere mich an einen Fall einer Bibliothek (alte jQuery?), Wo then Rückruf-Ergebnisse den Zustand des Versprechens geändert.
2: In ihrem Auflösungsverhalten zumindest. Jedes Versprechen ist immer noch nur ein Objekt.
3: Sie nicht. Das solltest du wirklich nicht. Ich beantworte nur die Titelfrage, aber du solltest aufhören, komische Sachen zu machen.

+0

Warum sollten Sie jemals ein bestimmtes Objekt benötigen, das dem ersten folgt? Warum haben Sie nicht einfach mehrere Codeabschnitte, die alle das gleiche Versprechen haben, wenn Sie mehrere Follower derselben Auflösung/Ablehnung haben wollen? – jfriend00

+0

@ jfriend00: Ich weiß nicht, tun Menschen seltsame Dinge mit dem Versprechen, und ich war auf dem * Objekt * von benutzerdefinierten Eigenschaften zu denken, dass Sie nicht wollen, zu teilen. Auch das Verteilen mehrerer verschiedener Promise-Instanzen kann einen Unterschied für die Löschung bewirken (abhängig von der Implementierungssemantik). Aber ja, unter normalen Umständen sollten Sie genau das gleiche Versprechen wiederverwenden. Muss ich das in der Antwort deutlicher machen? – Bergi

+0

Ich denke, man sollte wohl klar, dass 99% der Zeit mehr machen (im Grunde immer, wenn Sie etwas nicht-Standard an das Versprechen Objekt selbst tun), müssen Sie nicht ein weiteres Versprechen müssen und alle Teile des Codes können nur zuschauen das gleiche Versprechen. – jfriend00

Verwandte Themen