web-dev-qa-db-fra.com

utilisation de l'attente sur la portée globale sans mot-clé async

J'essaie de faire quelque chose comme ça sur portée globale dans nodejs REPL. Selon ma compréhension, les deux déclarations suivantes sont valables. voir la documentation

let x = await Promise.resolve(2);
let y = await 2;

Cependant, ces deux instructions génèrent une erreur.

Quelqu'un peut-il expliquer pourquoi? ma version de noeud est v8.9.4

9
nmxl

await ne peut être utilisé que dans une fonction étiquetée async, il y a donc deux façons de l'aborder.

La première façon consiste à créer une fonction auto-invoquée comme celle-ci:

(async function() {
  let x = await Promise.resolve(2)
  let y = await 2
  
  console.log(x, y)
})()

Ou la deuxième façon consiste à utiliser .then()

Promise.resolve(2).then(async data => {
  let x = data
  let y = await 2

  console.log(x, y)
})
6
Get Off My Lawn

Tu ne peux pas faire ça. doc MDN dit

L'opérateur d'attente est utilisé pour attendre une promesse. Il ne peut être utilisé qu'à l'intérieur d'une fonction asynchrone.

5
unclexo

Cette proposition est actuellement à l'étape 2 du processus TC39. LIEN

Vous pouvez utiliser cette fonctionnalité dans Google Chrome et Mozilla Firefox à partir de maintenant. Vous pouvez utiliser le niveau supérieur attendre sans async dans la console.

Top level await in console

https://Twitter.com/addyosmani/status/1080365576218759168

2
Ankit Sinha

depuis le noeud 10, vous pouvez exécuter le processus de noeud avec --experimental-repl-wait pour autoriser le niveau d'attente https://nodejs.org/api/repl.html#repl_await_keyword

1
Vladimir Boretskyi