Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

246
Views
¿Cómo hacer que una función devuelva una promesa en JavaScript?

Estoy tratando de hacer una función que tome una serie de objetos y forme una tabla a partir de ellos. Pero quiero que sea como esas promesas donde podemos tener promise().then().catch() básicamente solo quiero la .then() y .catch() en mi función. Intenté hacer esto:

 function makeTable(tableContent) { tableContent.forEach((cell) => { let type = cell.type return new Promise(function(resolve, reject){ if (type === "th" || type === "tr") { resolve("works") } else { reject(`Cell type must be either "th" or "tr" you passed "${type}"`) } }) }) } let table = [ { type: "pf", }, ] makeTable(table).then(()=>console.log("Success!")).catch(err=>console.log(err))

Pero obviamente esto no funciona. Quería obtener esta funcionalidad porque solo quería saber más sobre las promesas y quería crear una función que pudiera hacer lo mismo. Desafortunadamente, no puedo encontrar ningún lugar en Internet que responda esto. Gracias por leer esta pregunta!!

Algunas personas preguntan si por qué realmente necesito hacerlo aunque puedo hacerlo de otras maneras. ¿Por qué sólo promesas? Bueno, en realidad solo quiero jugar con ellos para poder entenderlos mejor y esa es la razón de esta pregunta.

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Ser "un gran admirador de las promesas" es una cosa, pero usarlas donde no son absolutamente necesarias es simplemente una mala educación.

Dicho esto, si desea operar con una serie de promesas, puede usar Promise.all() :

 function makeRow(row) { return Promise.all(row.map(({type}) => new Promise((resolve, reject) => { if (type === 'th' || type === 'td') { resolve('Works'); } else { reject(`Cell type must be either "th" or "td" you passed "${type}"`) } }))); } const row = [{ type: 'th' }, { type: "pf" }]; makeRow(row) .then(() => console.log("Success!")) .catch(console.dir);

about 4 years ago · Juan Pablo Isaza Report

0

Vale la pena señalar que en realidad no necesita promesas aquí, ya que todo es sincrónico. Dicho esto, si quieres hacer esto, tienes 2 enfoques.

Puede devolver una sola Promesa al final de todo:

 function makeTable(tableContent) { return new Promise((resolve, reject) => { tableContent.forEach((cell) => { let type = cell.type; if (type !== 'th' && type !== 'tr') { reject(`Cell type must be either "th" or "tr" you passed "${type}"`); } }); resolve('works'); }); }

o puede devolver una Promesa para cada artículo, convirtiendo cada uno en una Promesa y envolviéndolos con Promise.all()

 function makeTable(tableContent) { return Promise.all( tableContent.map((cell) => { let type = cell.type; return new Promise(function (resolve, reject) { if (type === 'th' || type === 'tr') { resolve('works'); } else { reject(`Cell type must be either "th" or "tr" you passed "${type}"`); } }); }) ); }
about 4 years ago · Juan Pablo Isaza Report

0

Bueno. Entonces, en primer lugar, no creo que haya ninguna necesidad de Promesas aquí. Y no debemos abusar del concepto ya que puede causar problemas de rendimiento. Si aún desea usar promesas, puede devolver la matriz de promesas y puede recorrer allí.

 function makeTable(tableContent) { let prmsArr = []; tableContent.forEach((cell) => { let type = cell.type; prmsArr.push(new Promise(function(resolve, reject){ if (type === "th" || type === "tr") { console.log('Hi'); resolve("works"); } else { console.log('Hello'); reject(`Cell type must be either "th" or "tr" you passed "${type}"`); } })); }); return prmsArr; } let table = [ { type: "pf", }, { type: "tr", }, ]; makeTable(table).forEach(prms => prms.then(()=>console.log("Success!")).catch(err=>console.log(err)));

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!