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

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

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 Denunciar

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 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