JavaScript Promise, resolve() mit mehreren Argumenten aufrufen

Hendoul

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

Folgendes Code-Beispiel: (https://jsfiddle.net/GarfieldKlon/h7xfbcsm/3/)
Javascript:
function getFoo() {
    return new Promise( (resolve, reject) => {
        resolve('foo', 'bar');
    });
}

const result = getFoo();

result.then((value1, value2) => {
    console.log(value1);
    console.log(value2);
})

Warum kann ich resolve nicht mit 2 Argumenten aufrufen? Ich meinte irgendwo mal aufgeschnappt zu haben, dass es daran liegt, dass eine Funktion nur einen Returnwert haben kann. Aber wir geben ja nicht das result von resolve() zurück?

Hinter resolve('foo', 'bar') steckt ja die Funktion (value1, value2)... ?
 
resolve() akzeptiert lediglich einen einzelnen Parameter mit deinem Rückgabewert. Weitere Parameter sind nicht vorgesehen. Siehe dazu die MDN web docs.

Wenn du mehrere Rückgabewerte haben möchtest, kannst du entweder auf ein Array zurückgreifen, oder du erstellst dir einen eigenen Datentyp mit mehreren Eigenschaften. Kann ein spezieller Datentyp sein oder ein billiges Tupel.
 
Ja ich weiss, dass ich einfach ein Object oder Array brauchen könnte. Mich interessiert aber warum man resolve() nicht mit mehreren Argumenten aufrufen kann.

Hinter resolve() steckt doch die Funktion die man im .then(...) definiert hat? Und wenn man dort eine Funktion mit mehreren Parametern definiert müsste man die doch auch so aufrufen können?

Also wird irgendwo in den Promise-Innereien die resolve Methode auseinandergenommen und nur das erste Argument beachtet?
 
Nein, resolve() ist eine Funktion im Promise-Objekt, die entsprechend definiert sein muss. Intern läuft das dann halt quasi so (mehr oder weniger Pseudocode):

Javascript:
class Promise {
    resolve(value) {
        return new Thenable(value);
    }
}

class Thenable {
    constructor(value) {
        this.value = value;
    }
    
    then(func) {
        func(this.value);
    }
}
 
Ok, vielen Dank :)
 

Ähnliche Themen

Antworten
8
Aufrufe
1.500
R
  • R.I.P.er
  • Online
Antworten
2
Aufrufe
9.780
R.I.P.er
R
Zurück
Oben