Tenho o seguinte codigo:
const Conexao = require('../../infra/conexao/conexao')
const Consulta = require('../../infra/administrador/consultas')
const Departamento = require('../../infra/consultas/departamentos')
module.exports = (app) => {
app.get('/consulta-niveis', (req, res) => {
res.marko(require('../../views/administrador/administrador.marko'))
})
app.get('/niveis-adm', (req, res) => {
new Conexao().base().then(conexao => {
let estrutura = async function () {
let trabalho = await Departamento.nivel1(conexao).then(resultado => {
let result = resultado.rows.map(n1 => {
return `
<div class="alinha">
<button class="clicar"></button><span>${n1}</span>
${(async function () {
await Departamento.nivel2(conexao, 18, n1).then(async resultado => {
return Promise.all(resultado.rows.map(async n2 => {
return (async () => `
<div class="alinha">
<button class="clicar"></button><span>${n2}</span>
${(async function () {
let trabalho = await Departamento.nivel3(conexao, 18, n1, n2).then(resultado => {
let result = resultado.rows.map(n3 => {
return `
<div>
<button class="clicar"></button><span>${n3}</span>
</div>
`
})
return result
})
return trabalho.join('')
})()}
</div>
`)()
}))
})
return trabalho
})()}
</div>
`
})
return result
})
return trabalho.join('')
}
estrutura().then(dados => {
console.log(dados);
})
})
})
}
Que me retorna isto:
<div class="alinha">
<button class="clicar"></button><span>MERCEARIA</span>
[object Promise]
</div>
<div class="alinha">
<button class="clicar"></button><span>PERECIVEIS</span>
[object Promise]
</div>
<div class="alinha">
<button class="clicar"></button><span>NAO ALIMENTAR</span>
[object Promise]
</div>
Esta minha conexao comunica com o banco oracle que realiza uma consulta assíncrona, isto me retorna um array que é iterado no map que realiza mais uma consulta assincrona, como faço para aguardar dentro do map todas as consultas serem feitas, e só entao devolver a string completa?