Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

169
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda