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

223
Views
El nodo asíncrono espera la ejecución de la función no en orden

Estoy confundido. Soy nuevo en async, así que sé que me estoy perdiendo algo fundamental, pero me estoy rascando la cabeza. Por los ejemplos que he visto, pensé que tenía razón pero...

El siguiente código funciona bien cuando se burla. Sin embargo, cuando busco el objeto del tablero real de mongo, puedo ver que la ejecución no está en orden. Por lo tanto, el código que se basa en que hay un objeto de tablero falla debido a que no está definido.

Código relevante

 router.get('/:id?', (req, res) => { getDashboardData(req) }) async function getDashboardData(req) { const dashboardId = await getDashboardId(req) const dashboard = await loadDashboard(dashboardId) const results = await showResults(dashboardId, dashboard) } async function getDashboardId(req) { dashboardId = req.params.id.trim() // Some other things happen here but ultimately we return a UUID return(dashboardId) } async function loadDashboardFromId (dashboardId) { Dashboard.findOne({dashboardId: dashboardId}).then((dashboard) => { if (dashboard == null || dashboard.dashboardId == null) { throw new Error('No dashboard matched in loadDashboardFromId for dashbardId: ' + dashboardId) } else { console.log('dashboard within loadDashboardFromId: ' + dashboard) return dashboard } }) } async function showResults(dashboardId, dashboard) { console.log("dashboardId: " + dashboardId) console.log("dashboard within showResults: " + dashboard) }

Salida de la consola a continuación. Puede ver que showResults() se ejecuta antes de que loadDashboard() regrese:

 connected to mongo server. open connection to mongo server. dashboardId: dbc7e954-c6a7-490f-8d9b-4dd11f11d262 dashboard within showResults: undefined dashboard within loadDashboardFromId: { _id: new ObjectId("6208f552a442468c65987e62"), dashboardId: 'dbc7e954-c6a7-490f-8d9b-4dd11f11d262', createdDate: 2022-02-13T00:00:00.000Z, surveyId: 'b55a58d6-63f1-473e-9a3c-34f5d63af499', participantId: '9b274cfe-68ea-4206-9f3c-f2ee309ec4de', personalityTotal: new Decimal128("69"), // etc }```
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

No te mezcles then/catch y await . Usa uno u otro. Prefiero await :

 async function loadDashboardFromId (dashboardId) { const dashboard = await Dashboard.findOne({dashboardId: dashboardId}) if (dashboard == null || dashboard.dashboardId == null) { throw new Error('No dashboard matched in loadDashboardFromId for dashbardId: ' + dashboardId) } else { console.log('dashboard within loadDashboardFromId: ' + dashboard) return dashboard } }
about 4 years ago · Juan Pablo Isaza Report

0

Puede usar Promise... Para más documentaciónhttps://www.newline.co/fullstack-react/30-days-of-react/day-15/
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve

 async function getDashboardData(req) { var dashboardId; var dashboard; var promise = new Promise(async function(resolve, reject) { dashboardId = await getDashboardId(req) dashboard = await loadDashboard(dashboardId) if(dashboardId && dashboard){ resolve(true); } }) const results = await showResults(dashboardId, dashboard) }
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!