Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

221
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda