javascript design-patterns asynchronous promise anti-patterns

Javascript-si con un caso asincrónico



design-patterns asynchronous (1)

Mi pregunta es un poco acerca del concepto.

Muchas veces existe esta situación:

if(something){ someAsyncAction(); }else{ someSyncAction(); } // Continue with the rest of code.. var a = 5;

El problema con este caso es claro, no quiero que se llame a var a = 5 a menos que se haga someAsyncAction() o someSyncAction() , ahora, porque soAsyncAction() es asíncrono de la única manera (que se me ocurre) resolver esta situación es algo así:

var after = function(){ // Continue with the rest of code.. var a = 5; } if(something){ someAsyncAction(after); }else{ someSyncAction(); after (); }

PERO, este código es feo, difícil de leer y parece antipatrón y problemático.

Intento pensar que tal vez pueda encontrar alguna solución para eso con Promesas (usando Bluebird en el backend) pero no puedo encontrar algo.

¿Alguien ha enfrentado esto antes y puede ayudarme a resolverlo?

¡Gracias!


Con las promesas, tendría un patrón similar al de la devolución de llamada, solo que almacenaría el resultado primero y no tendría que llamar / pasar la devolución de llamada dos veces:

function after(result) { // Continue with the rest of code.. var a = 5; } var promise; if (something){ promise = someAsyncAction(); } else { promise = Promise.resolve(someSyncAction()); } promise.then(after);

O, en resumen, usaría el operador condicional y lo estructuraría mucho más directamente:

(something ? someAsyncAction() : Promise.resolve(someSyncAction()) ).then(function(result) { // Continue with the rest of code.. var a = 5; });