2015-07-17 6 views
15

Ich bin ziemlich neu bei Promises und möchte wissen, warum meine Promise-Definition ausgeführt wird, ohne dass ich eine anrufe oder eine Lösung dafür mache.Warum wird meine Promise-Definition ausgeführt?

Wenn Sie das Beispiel ausführen und die Konsole sehen, sehen Sie die Meldung 'Start loader'.

https://jsfiddle.net/npqgpcud/

+0

Ihre Executor-Funktion * nicht * rufen 'resolve()'. – Pointy

+0

@Pointy, ich denke, die Frage dreht sich um die Tatsache, dass _executor_ sofort ausgeführt wird und synchron bei der Instantiierung eines Versprechens, hat Domenic einen Verweis unten auf der Spezifikation gegeben, wo es deutlich sagt, warum –

+0

Es gibt keine Probleme mit dieser Tatsache jedoch. Selbst wenn das Versprechen gelöst wurde, bevor _ '.dann 'angehängt wurde, wird der mit' .then' später verbundene Handler korrekt ausgeführt –

Antwort

14

, die einfach ist, wie Versprechen definiert sind. Sie führen ihre Executor-Funktion sofort aus. Es ist in der Spezifikation: Promise(executor), Schritt 10.

Dies ist eine Instanz der revealing constructor pattern; Lesen das könnte dir helfen zu verstehen.

+0

Danke Domenic! Ich wusste nicht, dass es so definiert wurde. Wie ich auf einen Kommentar hingewiesen habe, wollte ich eine generische Promise, die als Wrapper für jQuery ajax funktioniert, die mit verschiedenen Parametern für die Ajax-Einstellungen aufgerufen werden kann. –

+2

@ AdriánE: Versprechen erhalten keine Argumente. Wenn Sie Parameter benötigen, verwenden Sie eine * Funktion *, die ein Versprechen zurückgibt. – Bergi

+1

Promise (Executor) Verbindung ist unterbrochen. –

4

Das geschieht, weil ein Versprechen sofort und synchron ausgeführt wird.

Fügen Sie Funktionen hinzu, die ausgeführt werden, wenn das Versprechen entweder erfüllt ist (resolve Argument) oder zurückgewiesen wurde (reject Argument).

mit Informationen aus den Kommentaren von @Kirill Slatin

Verwandte Themen