JavaScript Attendre et priorité de l'opérateur


Exemple

Vous devez garder à l'esprit la priorité de l'opérateur lorsque vous utilisez le mot-clé await .

Imaginez que nous ayons une fonction asynchrone qui appelle une autre fonction asynchrone, getUnicorn() qui renvoie une promesse qui se résout en une instance de classe Unicorn . Maintenant, nous voulons obtenir la taille de la licorne en utilisant la méthode getSize() de cette classe.

Regardez le code suivant:

async function myAsyncFunction() {
    await getUnicorn().getSize();
}

À première vue, cela semble valable, mais ce n'est pas le cas. En raison de la priorité des opérateurs, cela équivaut à ce qui suit:

async function myAsyncFunction() {
    await (getUnicorn().getSize());
}

Ici, nous essayons d'appeler la méthode getSize() de l'objet Promise, ce qui n'est pas ce que nous voulons.

Au lieu de cela, nous devrions utiliser des crochets pour indiquer que nous voulons d'abord attendre la licorne, puis appeler la méthode getSize() du résultat:

async function asyncFunction() {
    (await getUnicorn()).getSize();
}

Bien sûr. La version précédente pourrait être valide dans certains cas, par exemple si la fonction getUnicorn() était synchrone, mais que la méthode getSize() était asynchrone.