web-dev-qa-db-fra.com

valeur de retour après une promesse

J'ai une fonction javascript dans laquelle je veux renvoyer la valeur obtenue après la méthode de retour. Plus facile à voir qu'à expliquer

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

Quelle est la meilleure façon de faire cela avec une promesse. Si je comprends bien, le return val retournera avant que lookupValue ait terminé, mais je ne peux pas return res.val comme cela ne fait que revenir de la fonction interne.

67
pedalpete

Utilisez un motif suivant ces lignes:

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

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

(Bien que cela soit un peu redondant, je suis sûr que votre code actuel est plus compliqué)

19
SomeKittens

La meilleure façon de le faire serait d'utiliser la fonction de retour de promesse telle qu'elle est, comme ceci

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

La fonction qui appelle une fonction asynchrone ne peut pas attendre que la fonction asynchrone retourne une valeur. En effet, il appelle simplement la fonction asynchrone et exécute le reste du code qu'il contient. Ainsi, lorsqu'une fonction asynchrone retourne une valeur, elle ne sera pas reçue par la même fonction qui l'a invoquée.

Ainsi, l’idée générale est d’écrire le code qui dépend de la valeur de retour d’une fonction async, dans la fonction async elle-même.

16
thefourtheye