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

284
Vistas
La promesa da como resultado un TypeError no detectado: func_get_db_data no es una función

Estoy construyendo una demostración que imita la estructura de solicitud/recepción de datos de una base de datos. La salida debe ser solo un registro de consola de la matriz devuelta.

Recibo el mensaje Uncaught TypeError: func_get_db_data is not a function

Vi esta pregunta TypeError: #<Promise> no es una función

Pero la respuesta es un poco demasiado específica para que yo la aplique a mi situación. ¿Cómo puedo entender la solución aquí?

 let func_get_db_data = new Promise((resolve, reject) => { resolve([ {name: 'Bob', gender:'m', class:'junior', job: 'Teacher'}, {name: 'Dan', gender:'m', class:'senior', job: 'Detective'}, {name: 'Ann', gender:'f', class:'junior', job: 'Analyst'}, {name: 'Sue', gender:'f', class:'retired', job: 'Accountant'} ]); }); const tableData = func_get_db_data().then( (data) => { return data; }); console.log(tableData);

Actualizar

Basado en los comentarios a continuación, probé esto (pero no lo entendí del todo... simplemente devuelve un objeto vacío)

 let func_get_db_data = () => { return [ {name: 'Bob', gender:'m', class:'junior', job: 'Teacher'}, {name: 'Dan', gender:'m', class:'senior', job: 'Detective'}, {name: 'Ann', gender:'f', class:'junior', job: 'Analyst'}, {name: 'Sue', gender:'f', class:'retired', job: 'Accountant'} ]; }; const getTables = new Promise(func_get_db_data); getTables.then( (data) => { return data; }); console.log(getTables);

Lo que realmente me gustaría es estructurar el código para que una estructura como esta devuelva los datos:

 const tableData = func_get_db_data().then( (data) => { return data; });
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

No puede inicializar una variable en un objeto de promesa y luego invocarlo, debe ser invocado por una función para devolver el valor.

Simplemente envuelva la promesa en una función y devuélvala. Ahora puede invocarlo y tener acceso a los métodos de promesa.

Sin embargo, la forma en que intenta recuperar los datos de la promesa es un problema con la estructura del programa. Básicamente, si desea mantener ese tipo de estructura de código, debe usar el paradigma async/await; de lo contrario, debe trabajar dentro del .then() de la promesa para comenzar a usar sus datos.

Ejemplo:

 const func_get_db_data = () => { return new Promise((resolve, reject) => { return resolve([ {name: 'Bob', gender:'m', class:'junior', job: 'Teacher'}, {name: 'Dan', gender:'m', class:'senior', job: 'Detective'}, {name: 'Ann', gender:'f', class:'junior', job: 'Analyst'}, {name: 'Sue', gender:'f', class:'retired', job: 'Accountant'} ]) }) } async function main() { const tableData = await func_get_db_data(); console.log("tableData: ", tableData); } main()

Todo dentro de la función asíncrona se procesará sincrónicamente ya que la ejecución del programa solo continuará una vez que func_get_db_data() se haya resuelto y devuelva un valor a tableData.

Según la estructura de su programa, especialmente porque está tratando de inicializar una variable con el valor de retorno de un objeto de promesa resuelto, sería mejor usar el paradigma async/await.

Si desea usar el encadenamiento de promesas, también está bien, pero toda la lógica que desea realizar en función de los datos de resolución está confinada dentro de .then() así:

 const func_get_db_data = (query) => { return new Promise((resolve, reject) => { return resolve([ {name: 'Bob', gender:'m', class:'junior', job: 'Teacher'}, {name: 'Dan', gender:'m', class:'senior', job: 'Detective'}, {name: 'Ann', gender:'f', class:'junior', job: 'Analyst'}, {name: 'Sue', gender:'f', class:'retired', job: 'Accountant'} ]) }) } func_get_db_data() .then(resolve => { console.log("table data: ", resolve); //example data parsing const tableData = resolve.slice(0, 1); return tableData; }) .then(resolve2 => console.log("resolve2: ", resolve2)) .catch(err => console.log(err))

Entonces, si desea inicializar las variables a un valor prometido, debe usar el enfoque asíncrono/esperar, pero también puede utilizar el encadenamiento de promesas.

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