JavaScript Promises in Javascript

Hendoul

Commander
Registriert
Apr. 2008
Beiträge
2.049
Hi :)

Ich befasse mich grad mit Promises in Javascript (jaja, danach gleich mit async/await ;)

Ich verstehe folgendes Konstrukt noch nicht wirlich:
Code:
var myPromise = function() {
  return new Promise(function(resolve, reject) {
      if (someValue > 5) {
        resolve('success');
      } else {
        reject('error');
      }
  });
};
var testPromise = myPromise();

Und zwar verstehe ich nicht, woher die Methoden-Argumente 'resolve' und 'reject' kommen. Ist
Code:
function(resolve, reject)
eine anonyme Funktion die gleich ausgeführt wird wenn man
Code:
myPromise()
aufruft?
 
resolve und reject sind Argumente, die das Promise-Objekt übergibt.

Syntax
new Promise(executor);
Parameters
executor A function that is passed with the arguments resolve and reject. The executor function is executed immediately by the Promise implementation, passing resolve and reject functions (the executor is called before the Promise constructor even returns the created object). The resolve and reject functions, when called, resolve or reject the promise, respectively. The executor normally initiates some asynchronous work, and then, once that completes, either calls the resolve function to resolve the promise or else rejects it if an error occurred. If an error is thrown in the executor function, the promise is rejected. The return value of the executor is ignored.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

Lg
 
  • Gefällt mir
Reaktionen: J@ck, psYcho-edgE und Madman1209
FranzvonAssisi schrieb:
resolve und reject sind Argumente, die das Promise-Objekt übergibt.
Wo genau im Code passiert das? Ich sehe lediglich ein Argument beim Constructor eines Promise, den 'executor'. Wo ist definiert, dass ich nicht new Promise(function(resolve, reject, xyz ) schreiben darf?
 
Darfst du, aber xyz wird dann als undefined zurückgegeben. Javascript ist da ja ganz unkompliziert. Im Promise-Code wird an irgendeiner stelle der executor mit zwei Argumenten aufgerufen.

Code:
if(this.isCreated) {
    executor(this.resolve, this.reject);
}

Da JavaScript, darfst du hier trotzdem alle Funktionen übergeben, egal wieviele Argumente. Die ersten beiden werden immer "gefüllt" mit dem ersten übergebenen Argument (Funktion zum resolven / auflösen der Promise) und dem zweiten, der Funktion zum Verwerfen der Promise. Alle weiteren (die du abfragst) werden "undefined" sein.

Natürlich kannst du die Namen frei erdenken, du kannst schreiben new Promise(function(hahahaHatGeklappt, UäähPromiseFehlgeschlagen, xyz )

Lg

PS: Ja, Unicode-Charaktere sind zulässig ;)
 
Ok, mich würde genau die "Innereien" von Promise interessieren, damit ich das verstehe. Bleibe dann aber hier stecken: https://github.com/v8/v8/find/master -> suche nach 'promise'
 
Im V8 Code das zu finden und zu verstehen dürfte echt schwierig werden.
Schau mal hier rein: https://github.com/petkaantonov/bluebird/tree/master/src

Das ist wohl die populärste Promise Library, aus Zeiten noch bevor diese in den Core gewandert sind. Ist sauber geschriebenes Javascript. Kann man eigentlich hervorragend verstehen. Das Promise API von Bluebird geht allerdings weit über die Standardfunktionen hinaus. Konzentriere dich also vielleicht erstmal nur auf die Standardhandler (revolve/reject).
 
Zurück
Oben