Las promesas son un patrón de programación en JavaScript (y otros lenguajes de programación) que se utiliza para manejar operaciones asincrónicas. En lugar de proporcionar una devolución de llamada a una función para ser ejecutada cuando una operación asincrónica se ha completado, la operación asincrónica devuelve una ‘promesa’ de que se proporcionará un resultado en algún momento en el futuro.
Aquí hay un ejemplo sencillo de cómo usar promesas en Node.js:
```javascript
let promise = new Promise(function(resolve, reject) {
// hacer algo asincrónico como leer un archivo
let resultado = ‘algún resultado’;
let error;
promise.then(function(resultado) {
// esta función se llama cuando la promesa es ‘resuelta‘
console.log(resultado);
}, function(error) {
// esta función se llama cuando la promesa es ‘rechazada‘
console.error(error);
});
```
En este ejemplo, creamos una nueva Promesa que hace algo asincrónico. Cuando el trabajo asincrónico se ha completado, llamamos a la función `resolve` si todo fue bien, o a la función `reject` si hubo un error. Después de crear la promesa, utilizamos la función `then` para proporcionar devoluciones de llamada que se ejecutan cuando la promesa se resuelve o se rechaza.
La gran ventaja de las promesas es que son encadenables. Esto significa que puedes hacer algo como esto:
```javascript
funcionQueDevuelveUnaPromesa()
.then(function(resultado1) {
return otraFuncionQueDevuelveUnaPromesa(resultado1);
})
.then(function(resultado2) {
console.log(‘El resultado final es: ‘, resultado2);
})
.catch(function(error) {
console.error(error);
});
```
En este ejemplo, llamamos a dos funciones asincrónicas en serie, y el resultado de la primera función se pasa a la segunda función. También agregamos un bloque de captura al final que se ejecutará si alguna de las promesas se rechaza. Este tipo de control de flujo sería muy difícil de hacer con devoluciones de llamada sin terminar en el llamado “infierno de las devoluciones de llamada”.