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

175
Visualizações
¿Por qué la palabra reservada inesperada 'espera' incluso cuando mi función se declara como asíncrona?

Estoy reuniendo un código Node.js para consultar LDAP que usa promesas. Cuando lo ejecuto, aparece una palabra reservada inesperada sobre la espera en la línea 43. Esta parte:

 let connection = await connect(ldapURL).catch((err) => { console.error('LDAP server error:', err); reject(err); });

El código completo se muestra a continuación.

Tengo una promesa devuelta en la función connect() y funciona bien. De hecho, si elimino la promesa de la función listObjects() , el archivo console.debug console.debug(results); line imprime exactamente lo que estoy esperando.

Entonces, ¿por qué await await connect() está causando un error en mi función listObjects() ? Mi búsqueda ha arrojado muchas respuestas que dicen: "Necesita usar async", pero ya tengo mis listObjects() declarados como async.

¿Dónde me he equivocado?

Código completo:

 #!/usr/bin/env node import ldapjs from 'ldapjs'; const ldapURL = [ 'ldap://127.0.0.1:389' ]; const bindDN = 'uid=search,dc=home'; const bindPassword = 'P@ssw0rd'; function connect(serverURL) { return new Promise((resolve, reject) => { const client = ldapjs.createClient({ url: serverURL }); client.on('connect', () => { console.debug('Connected to:', ldapURL); console.debug('Binding as:', bindDN); client.bind(bindDN, bindPassword, (err) => { if (err) { console.debug(err.message); reject('Bind credentials rejected.'); } else { resolve(client); } }); }); client.on('error', (err) => { reject('Unable to connect to ' + serverURL); }); }); } /** * Search LDAP and return objects. * @baseDN {string} Where to start, like 'ou=People,dc=example,dc=com' * @filter {string} Optional LDAP query to limit results, like '(objectClass=posixAccount)' * @returns {promise} ... Eventually. */ async function listObjects(baseDN, filter) { return new Promise((resolve, reject) => { let connection = await connect(ldapURL).catch((err) => { console.error('LDAP server error:', err); reject(err); }); let opts = { filter: filter, scope: 'sub' }; let results = []; connection.search(`${baseDN}`, opts, (err, res) => { res.on('searchEntry', (entry) => { results.push(entry); }); res.on('end', () => { connection.unbind(() => { console.debug(results); resolve(results); }); }); }); }); } let ldapObjects = await listObjects('dc=home', '(objectClass=posixAccount)'); console.log(ldapObjects);
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Después de sugerencias útiles en los comentarios, la solución fue Mover la línea return new Promise((resolver, rechazó) => { hacia abajo para que solo envuelva la parte connection.search(…) como lo sugiere Bergi

Aquí está el código después de esa modificación:

 #!/usr/bin/env node import ldapjs from 'ldapjs'; const ldapURL = [ 'ldap://127.0.0.1:389' ]; const bindDN = 'uid=search,dc=home'; const bindPassword = 'P@ssw0rd'; function connect(serverURL) { return new Promise((resolve, reject) => { const client = ldapjs.createClient({ url: serverURL }); client.on('connect', () => { console.debug('Connected to:', ldapURL); console.debug('Binding as:', bindDN); client.bind(bindDN, bindPassword, (err) => { if (err) { console.debug(err.message); reject('Bind credentials rejected.'); } else { resolve(client); } }); }); client.on('error', (err) => { reject('Unable to connect to ' + serverURL); }); }); } /** * Search LDAP and return objects. * @baseDN {string} Where to start, like 'ou=People,dc=example,dc=com' * @filter {string} Optional LDAP query to limit results, like '(objectClass=posixAccount)' * @returns {promise} ... Eventually. */ async function listObjects(baseDN, filter) { let connection = await connect(ldapURL).catch((err) => { console.error('LDAP server error:', err); reject(err); }); let opts = { filter: filter, scope: 'sub' }; let results = []; return new Promise((resolve, reject) => { connection.search(`${baseDN}`, opts, (err, res) => { res.on('searchEntry', (entry) => { results.push(entry); }); res.on('end', () => { connection.unbind(() => { resolve(results); }); }); }); }); } let ldapObjects = await listObjects('dc=home', '(objectClass=posixAccount)'); console.log(ldapObjects);
about 4 years ago · Juan Pablo Isaza Relatório

0

Creo que debe eliminar la nueva Promesa porque async devuelve los datos envueltos en la Promesa. Creo que su ldapObjects almacena una Promesa y listObjects devuelve una envoltura de Promesa dentro de una Promesa.

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