2016-04-29 6 views
0

Ich würde gerne wissen, wie js verspricht, intern zu arbeiten.Wie funktioniert JS Promises intern?

Ich habe gegoogelt, aber ich konnte die Antwort nicht finden (oder ich wusste nicht, wie man googelt).

Ich weiß nicht, wie es zu Ihnen zurückkommt.

Lets sagen, dass ich diesen Client-Code haben:

function whatever() { 
    doSomethingLocally; 

    callPromiseThatGoesAllOverTheWorldAndThenGetsBackToYou() 
     .then(
      doSomethingLocallyAgain 
     ); 

    doSomeOtherThingLocally; 
} 

Ich mag würde wissen, wie, wenn das Versprechen erfüllt, es zurück an der richtigen Stelle im Code wird (das ‚doSomethingLocallyAgain‘).

+0

Während die Spezifikation [beschreibt, wie sie _behave_] (http://www.ecma-international.org/ecma-262/6.0/#sec-promise-objects), wie sie tatsächlich _work intern_ sind, sind in den Aufgabenbereich von der Implementierer der Spezifikation (dh die JavaScript-Engine). Gibt es einen Grund dafür, dass Sie danach fragen, vielleicht ist das vielleicht eine bessere Frage? –

+0

Ich frage das, weil ich nicht weiß, wie der Fluss zu genau diesem Punkt zurückgeht. Ich weiß nicht, ob es einen Socket gibt, der mit einem Zeiger auf etwas hört, wenn er also die Antwort empfängt, ändert er den Fluss auf genau diesen Punkt. –

+0

'doSomethingLocallyAgain' muss eine Funktion sein. Sie geben diese Funktion an das Versprechen weiter und rufen diese Funktion einfach auf, sobald sie fertig ist. Es gibt nichts Magisches daran. Hier ist ein vereinfachtes Beispiel dafür, wie Callbacks funktionieren: 'function do (f) {setTimeout (() => {/ * mache ein paar interne Sachen */f();}, 3000); }; do (() => console.log ('ruf mich vielleicht' an)); '. In diesem Beispiel akzeptiert "do" eine Funktion und ruft sie auf, wenn sie fertig ist. –

Antwort

2

Ein Versprechen ist nur ein schicker Rückgabewert, an den Sie Callbacks anhängen können, anstatt sie an die Funktion zu übergeben. Fügen Sie die nette Invariante hinzu, dass die Callbacks nie sofort aufgerufen werden, sondern immer eine Mikro-Task-Warteschlange anlegen, und das ist so ziemlich alles.