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

439
Views
error de espera de nivel superior al usar la API NextJS

Estoy construyendo una API con NextJS y MongoDB. Hago una configuración básica en la parte superior del archivo API:

 const { db } = await connectToDatabase(); const scheduled = db.collection('scheduled');

y continúo el código con mi función de controlador:

 export default async function handler(req, res) { otherFunctionCalls() ... } const otherFunctionCalls = async () => { ... }

Sé que await funcionará solo dentro de una función asíncrona, pero me gustaría usar la constante scheduled en otras funciones a las que llama el controlador, por eso necesito llamarlo en la parte superior.

Si pongo la constante a cada función, entonces es una duplicación de código.

¿Cuál es la mejor práctica para acceder a la constante scheduled ? ¿Debo agregar la declaración otherFunctionCalls en la función del controlador?

El error completo lo que obtuve:

 Module parse failed: The top-level-await experiment is not enabled (set experiments.topLevelAwait: true to enabled it) File was processed with these loaders: * ./node_modules/next/dist/build/babel/loader/index.js You may need an additional loader to handle the result of these loaders. Error: The top-level-await experiment is not enabled (set experiments.topLevelAwait: true to enabled it)
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

En los comentarios, dijo que desea encontrar otra solución en lugar de habilitar el experimento de await de nivel superior en la herramienta que está utilizando.

Para hacer eso, tendrá que ajustar el código del módulo para manejar el hecho de que aún no tiene la colección scheduled , solo tiene una promesa . Si la única función exportada es handler y todas las demás funciones se van a llamar desde handler , tiene sentido manejar eso (¡sin juego de palabras!) en handler , de la siguiente manera:

 // A promise for the `scheduled` collection const pScheduled = connectToDatabase().then(db => db.collection("scheduled")); export default async function handler(req, res) { const scheduled = await pScheduled; await otherFunctionCalls(scheduled); // ... } const otherFunctionCalls = async (scheduled) => { // ...use `scheduled` here... };

Hay muchas maneras en que puede modificar eso, pero fundamentalmente querrá obtener la promesa (solo una vez está bien) y await a que obtenga su valor de cumplimiento en cualquier lugar donde necesite su valor de cumplimiento. (Para evitar el doble: await no vuelve a ejecutar nada; si la promesa ya se cumplió, solo le devuelve el valor de cumplimiento que ya tiene la promesa).

about 4 years ago · Juan Pablo Isaza 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!