wake-up-neo.com

Rückgabewert nach einem Versprechen

Ich habe eine Javascript-Funktion, mit der ich den Wert zurückgeben möchte, den ich nach der return-Methode erhalte. Einfacher zu sehen als zu erklären

function getValue(file){
    var val;
    lookupValue(file).then(function(res){
       val = res.val;
    }
    return val;
}

Was ist der beste Weg, um dies mit einem Versprechen zu tun. Wie ich es verstehe, die return val wird zurückkehren, bevor der Lookup-Wert es dann getan hat, aber ich kann nicht return res.val da das nur von der inneren Funktion zurückkehrt.

67
pedalpete

Verwenden Sie ein Muster wie folgt:

function getValue(file) {
  return lookupValue(file);
}

getValue('myFile.txt').then(function(res) {
  // do whatever with res here
});

(Obwohl dies ein bisschen redundant ist, bin ich sicher, dass Ihr tatsächlicher Code komplizierter ist.)

19
SomeKittens

Der beste Weg, dies zu tun, wäre, die Versprechen-Rückgabe-Funktion so zu verwenden, wie sie ist

lookupValue(file).then(function(res) {
    // Write the code which depends on the `res.val`, here
});

Die Funktion, die eine asynchrone Funktion aufruft, kann nicht warten, bis die asynchrone Funktion einen Wert zurückgibt. Weil es nur die asynchrone Funktion aufruft und den Rest des Codes darin ausführt. Wenn eine asynchrone Funktion einen Wert zurückgibt, wird dieser nicht von derselben Funktion empfangen, die ihn aufgerufen hat.

Daher besteht die allgemeine Idee darin, den Code, der vom Rückgabewert einer asynchronen Funktion abhängt, in die asynchrone Funktion selbst zu schreiben.

16
thefourtheye