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

180
Views
Reutilización de un objeto Promise existente si existe

Tengo un objeto Dialog que mostrará, bueno, diálogos. Hay muchos puntos de entrada para mostrar cuadros de diálogo, por ejemplo, yesNo() , message() , confirm() , etc. Sin embargo, todos estos métodos básicamente llaman al mismo otro método, llamado showSimpleDialog(title, message, buttons) .

Me gustaría que todos estos métodos (showSimpleDialog también) devuelvan una promesa, pero hay un inconveniente:

 yesNo() { return new Promise((resolve, reject) => { axios .get(......) .then(this.showSimpleDialog(...)); } }

Como puede ver, en el ejemplo anterior se me impide devolver la promesa que haría showSimpleDialog o pasar la Promesa instanciada a showSimpleDialog.

Lo primero es imposible porque ya estamos en una Promesa diferente cuando tenemos acceso a ella. Esto último porque el propio objeto Promise aún no está disponible dentro del constructor. Bueno, técnicamente, en este caso particular lo es (exactamente porque ya estamos en una Promesa diferente), pero algunas de mis funciones de entrada son síncronas, algunas asíncronas y simplemente no puedo usar el mismo patrón de código para lograr el mismo efecto. en ambos casos.

Investigué la cosa y encontré esto , pero el autor sugiere que, para empezar, el enfoque es defectuoso y arcaico.

Entonces, ¿cuál sería el enfoque correcto para devolver una Promesa en funcionamiento desde TODOS los puntos de entrada mientras los puntos de entrada aún estarían libres para reutilizar las Promesas de los demás?

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

0

Si entiendo correctamente, this.showSimpleDialog(...) también devuelve una Promise , ¿verdad?

Si desea que yesNo() devuelva la Promise devuelta por this.showSimpleDialog(...)

 yesNo() { return axios .get(......) .then(()=>{ return this.showSimpleDialog(...); }); }

Dicho esto, considere usar async/await , especialmente cuando se trata de múltiples promesas secuenciales, si es posible.

about 4 years ago · Juan Pablo Isaza Report

0

Su código está llamando a this.showSimpleDialog inmediatamente (sincrónicamente) sin esperar a que se resuelva ninguna promesa (la de axios ). Esto se debe a que el código no pasa una función al método then , sino que ejecuta this.showSimpleDialog . Esta ejecución devuelve una promesa (presumiblemente), pero then espera una función como argumento, no una promesa.

Por lo tanto, debe asegurarse de pasar una devolución de llamada a then y dejar que esa devolución de llamada devuelva una promesa. Así se encadenarán las promesas:

 .then(() => this.showSimpleDialog(...));

También es importante hacer que la devolución de llamada sea una función de flecha, ya que hará referencia a this , que pretende ser el this en el que se llama a yesNo .

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!