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

251
Views
Llamadas asincrónicas/en espera atómicas: ¿es posible no ejecutar primero si falla el segundo?

Lo pregunto un poco por capricho, ya que no estoy convencido de que esto sea posible debido a la forma en que funciona el tiempo, pero me preguntaba si alguien había encontrado una solución para esto.

¿Sería posible realizar múltiples llamadas asíncronas a diferentes puntos finales de API que dependan entre sí atómicamente? En el sentido de que si uno de ellos falla, ¿ninguno de ellos ejecuta?

Por ejemplo, si necesitáramos hacer 2 solicitudes de API, la primera para hacer un POST de un usuario y la segunda para hacer un POST usando la ID devuelta de la primera solicitud. Sin embargo, si no pudiera completar la segunda solicitud POST, no se crearía el usuario. Sin esta dependencia, usaría de forma predeterminada algo como Promise.all() sin embargo, dado que dependo del resultado de la primera llamada, no creo que este sea el enfoque correcto.

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

0

¿Sería posible realizar múltiples llamadas asíncronas a diferentes puntos finales de la API que dependan de cada uno de los otros átomos? En el sentido de que si uno de ellos falla, ¿ninguno de ellos ejecuta?

Sí, a través de un rechazo de promesa.

Digamos que necesita hacer dos operaciones asíncronas secuencialmente (una tras otra). Tu harías:

 doA().then(doB);

Si doA arroja un error, rechaza la promesa y no se llama a doB . Luego puede detectar el error y manejarlo de la forma que necesite. Con funciones async harías:

 (async function(){ let a = await doA(); let b = await doB(a); })();

Lo cual nuevamente, si doA arroja un error, entonces la llamada doB no ocurre.

Puede hacer que doA y doB arrojen diferentes tipos de error para manejarlos de manera diferente (si es necesario, como por ejemplo... hacer una reversión en A si B falla).

 class DoAError extends Error { }; class DoBError extends Error { }; async function doA(){ //... //... throw new DoAError(); //... } async function doB(){ //... //... throw new DoBError(); //... }

Y luego lo manejas así:

 (async function(){ try { let a = await doA(); let b = await doB(a); } catch(e){ if(e instanceof DoAError){ /* something wrong with DoA */ } else if(e instanceof DoBError){ /* something wrong with DoB */ } else { throw e; } } })();
about 4 years ago · Juan Pablo Isaza Report

0

No necesita hacer nada especial para manejar este caso. Prueba esto:

  1. Establecer indicadores para determinar si cada API se completa,
  2. Ejecute un endfunc() al final de cada función de llamada API,
  3. Solo proceda con la lógica de endcall() si cada bandera está configurada.

Coloca las banderas...

 var api1 = api2 = false;

Defina sus funciones de llamada API...

 apicall1() { // do api call api1 = true; endfunc(); } apicall2() { // do another api call api2 = true; endfunc(); }

Y rematar todo con un...

 endfunc() { if(api1 !== true && api2 !== true) { return; } // stuff to execute only after all API calls are done }`
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!