retourwaarde na een belofte

Ik heb een javascript-functie waarbij ik de waarde wil retourneren die ik krijg na de retourmethode.
Makkelijker te zien dan uit te leggen

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

Wat is de beste manier om dit te doen met een belofte. Zoals ik het begrijp, zal de return valterugkeren voordat de lookupValue het heeft gedaan, maar de ik kan niet return res.valomdat dat alleen terugkeert van de innerlijke functie.


Antwoord 1, autoriteit 100%

Gebruik een patroon als volgt:

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

(hoewel dit een beetje overbodig is, weet ik zeker dat uw eigenlijke code ingewikkelder is)


Antwoord 2, autoriteit 70%

De beste manier om dit te doen is door de functie voor het retourneren van beloften te gebruiken zoals deze is, zoals deze

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

De functie die een asynchrone functie aanroept, kan niet wachten tot de asynchrone functie een waarde retourneert. Omdat het gewoon de async-functie aanroept en de rest van de code erin uitvoert. Dus wanneer een asynchrone functie een waarde retourneert, wordt deze niet ontvangen door dezelfde functie die deze heeft aangeroepen.

Het algemene idee is dus om de code die afhangt van de retourwaarde van een async-functie, in de async-functie zelf te schrijven.

Other episodes