Bienvenidos sean a este post, continuemos con el post anterior.
Como mencionamos en el post anterior una de las premisas que debemos hacer para poder usar a las promesas en Express es la correcta manipulacion de estos mediante los manejadores de Express, analicemos el siguiente ejemplo cuando lo hacemos con codigo sincronico:
app.get('/', function (req, res) {
throw new Error('ROTISIMO');
});
En este caso toma la excepcion y procede a enviarla al manejador, pero esto mismo no funcionara con codigo asincronico, veamos este otro codigo:
app.get('/', (req, res) => {
fs.readFile('/no-existe', (err, data) => {
if (err) throw new Error(err);
// Trabaja con el archivo en cuestion
res.send(data);
});
});
En este caso intentaremos abrir un archivo, pero aqui tendremos un condicional donde ante un error enviara una excepcion con el codigo devuelto, en caso contrario procesa el archivo y termina enviando la informacion en data, como dijimos al trabajar con una promesa esta excepcion sera enviada a otro destino y por lo tanto nunca habra una notificacion sobre este, tomemos el ejemplo de piramide de la perdicion que vimos en el post anterior y cambiemoslo a codigo de asincronico de la siguiente forma:
router.get('/path/a/algo', (req, res, next) => {
let dato1, dato2, dato3, dato4;
funcion(req.query.arg1, req.query.arg2)
.then(_dato1 => {
dato1 = _dato1;
return funcion1(req.query.arg3, req.query.arg2, dato1);
})
.then(_dato2 => {
dato2 = _dato2;
return funcion2(req.query.arg1, req.query.arg42);
})
.then(_dato3 => {
dato3 = _dato3;
return funcion3();
})
.then(_dato4 => {
dato4 = _dato4;
res.render('page', { dato1, dato2, dato3, dato4 });
})
.catch(err => { next(err); });
});
Por ejemplo aqui obtenemos un archivo donde usaremos los tres objetos de siempre para manejar la solicitud, respuesta y el encargado de pasar al siguiente elemento respectivamente, declaramos cuatro variables para los datos, luego llamamos a una funcion para que manipule dos valores y mediante el then tomaremos ese valor devuelto y lo asignaremos a uno de las variables declaradas antes y devolveremos mediante otra funcion otro procesamiento de otros valores y el que definimos anteriormente, a este le encadenamos otros then, esto se denomina como encadenamiento de promesas, para poder manipular ese nuevo valor y almacenar en otra de las variables declaradas, volvemos a procesar otros valores y devolverlos mediante otra funcion y el siguiente then lo usaremos para tomar este nuevo valor pero no devolveremos nada sino que usaremos a render para mostrar la pagina con los cuatro valores, por ultimo tenemos un catch el cual ante cualquier error lo enviara mediante next y el error en cuestion, pero mientras este no ocurra seguira con la cadena anterior para procesarlo, este cubre uno de los paradigmas de cualquier lenguaje de programacion como es la practicidad y legibilidad para ver cualquier problema de manera facil, pero porque funciona este codigo con Express? por estos dos puntos:
- El paso final en una cadena de promesas finaliza con res.render o similar para enviar una respuesta al llamador
- El catch reporta siempre el error mediante next(err)
Y como mencionamos anteriormente si devolvemos directamente el valor del estado rejected, Express no tendra forma de manejarlo y este error se perdera ocurriendo lo mencionado un poco antes.
En resumen, hoy hemos visto como son los errores asincronicos en Express, primero analizamos como lo hace facilmente mediante un codigo sincronico, asi como tambien despues vimos como manejarlo mediante Express y un codigo asincronico y lo qque debemos tener en cuenta para poder hacerlo, espero les haya resultado util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
