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;
});