Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

238
Views
¿Cómo puedo usar async/await en el nivel superior?

He estado revisando async / await y después de revisar varios artículos, decidí probar las cosas yo mismo. Sin embargo, parece que no puedo entender por qué esto no funciona:

 async function main() { var value = await Promise.resolve('Hey there'); console.log('inside: ' + value); return value; } var text = main(); console.log('outside: ' + text);

La consola genera lo siguiente (nodo v8.6.0):

> exterior: [objeto Promesa]

> adentro: hola

¿Por qué el mensaje de registro dentro de la función se ejecuta después? Pensé que la razón por la que se creó async / await fue para realizar una ejecución síncrona usando tareas asíncronas.

¿Hay alguna manera de que pueda usar el valor devuelto dentro de la función sin usar .then() después de main() ?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

La await de nivel superior se ha movido a la etapa 3, por lo que la respuesta a su pregunta ¿Cómo puedo usar async/await en el nivel superior? es simplemente usar await :

 const text = await Promise.resolve('Hey there'); console.log('outside: ' + text)

Si desea una función main() : agregue await a la llamada a main() :

 async function main() { var value = await Promise.resolve('Hey there'); console.log('inside: ' + value); return value; } var text = await main(); console.log('outside: ' + text)

Compatibilidad

  • v8 desde octubre de 2019
    • el REPL en Chrome DevTools , Node.js y Safari web inspector
  • Nodo v13.3+ detrás de la bandera --harmony-top-level-await
  • TypeScript 3.8+ ( problema )
  • Deno desde octubre de 2019
  • Webpack@v5.0.0-alpha.15
over 4 years ago · Santiago Trujillo Report

0

Respuesta 2021: ahora puede usar la espera de nivel superior en la versión estable actual del nodo

La mayoría de las respuestas anteriores están un poco desactualizadas o son muy detalladas, así que aquí hay un ejemplo rápido para el nodo 14 en adelante.

Cree un archivo llamado runme.mjs :

 import * as util from "util"; import { exec as lameExec } from "child_process"; const exec = util.promisify(lameExec); const log = console.log.bind(console); // Top level await works now const { stdout, stderr } = await exec("ls -la"); log("Output:\n", stdout); log("\n\nErrors:\n", stderr);

Ejecutar node runme.mjs

 Output: total 20 drwxr-xr-x 2 mike mike 4096 Aug 12 12:05 . drwxr-xr-x 30 mike mike 4096 Aug 12 11:05 .. -rw-r--r-- 1 mike mike 130 Aug 12 12:01 file.json -rw-r--r-- 1 mike mike 770 Aug 12 12:12 runme.mjs Errors:
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!