JavaScriptProgramación

Aprendiendo a usar allSettled() en JavaScript

Una guía para desarrolladores

La función allSettled() es una herramienta útil en JavaScript que permite manejar promesas de manera eficiente. Esta función se utiliza comúnmente en situaciones donde se necesita garantizar que todas las promesas hayan finalizado, independientemente de si fueron resueltas o rechazadas. allSettled() devuelve un objeto con información sobre el estado de cada promesa, lo que facilita la depuración y la toma de decisiones en tiempo de ejecución.

Ejemplo 1: Realizar varias solicitudes HTTP en paralelo y verificar su estado

En este ejemplo, se utilizan las promesas de JavaScript para realizar varias solicitudes HTTP en paralelo y luego se utiliza allSettled() para comprobar el estado de cada solicitud.
«`javascript
const fetchData = async (url) => {
try {
const response = await fetch(url);
return response.ok ? await response.json() : null;
} catch (error) {
console.error(`Error al obtener datos de ${url}:`, error);
return null;
}
};
const urls = [‘https://api.example.com/data1’, ‘https://api.example.com/data2’];
Promise.allSettled(urls.map((url) => fetchData(url)))
.then((settledPromises) => {
settledPromises.forEach((promiseResult, index) => {
if (promiseResult.status === ‘fulfilled’) {
console.log(`Datos de ${urls[index]}:`, promiseResult.value);
} else {
console.error(`Error al obtener datos de ${urls[index]}:`, promiseResult.reason);
}
});
})
.catch((error) => {
console.error(‘Error general:’, error);
});
«`

Ejemplo 2: Actualizar la interfaz de usuario con datos obtenidos en paralelo

En este ejemplo, se utilizan las promesas y allSettled() para actualizar la interfaz de usuario con datos obtenidos de varias API en paralelo.
«`javascript
const fetchData = async (url) => {
try {
const response = await fetch(url);
return response.ok ? await response.json() : null;
} catch (error) {
console.error(`Error al obtener datos de ${url}:`, error);
return null;
}
};
const urls = [‘https://api.example.com/data1’, ‘https://api.example.com/data2’];
Promise.allSettled(urls.map((url) => fetchData(url)))
.then((settledPromises) => {
settledPromises.forEach((promiseResult, index) => {
if (promiseResult.status === ‘fulfilled’) {
const data = promiseResult.value;
// Actualizar la interfaz de usuario con los datos obtenidos
} else {
console.error(`Error al obtener datos de ${urls[index]}:`, promiseResult.reason);
}
});
})
.catch((error) => {
console.error(‘Error general:’, error);
});
«`

Ejemplo 3: Verificar la conexión a varias bases de datos

En este ejemplo, se utilizan las promesas y allSettled() para comprobar la conexión a varias bases de datos.
«`javascript
const checkDatabaseConnection = async (url) => {
try {
const response = await fetch(url);
return response.ok ? ‘Conexión exitosa’ : ‘Error en la conexión’;
} catch (error) {
console.error(`Error al comprobar la conexión a ${url}:`, error);
return ‘Error en la conexión’;
}
};
const databaseUrls = [‘https://api.example.com/database1’, ‘https://api.example.com/database2’];
Promise.allSettled(databaseUrls.map((url) => checkDatabaseConnection(url)))
.then((settledPromises) => {
settledPromises.forEach((promiseResult, index) => {
if (promiseResult.status === ‘fulfilled’) {
console.log(`Conexión a ${databaseUrls[index]}:`, promiseResult.value);
} else {
console.error(`Error al comprobar la conexión a ${databaseUrls[index]}:`, promiseResult.reason);
}
});
})
.catch((error) => {
console.error(‘Error general:’, error);
});
«`

Ejemplo 4: Procesar archivos en paralelo

En este ejemplo, se utilizan las promesas y allSettled() para procesar varios archivos en paralelo.
«`javascript
const processFile = async (file) => {
try {
// Procesar el archivo aquí
return ‘Procesamiento exitoso’;
} catch (error) {
console.error(`Error al procesar el archivo ${file}:`, error);
return ‘Error en el procesamiento’;
}
};
const files = [‘archivo1.txt’, ‘archivo2.txt’, ‘archivo3.txt’];
Promise.allSettled(files.map((file) => processFile(file)))
.then((settledPromises) => {
settledPromises.forEach((promiseResult, index) => {
if (promiseResult.status === ‘fulfilled’) {
console.log(`Procesamiento del archivo ${files[index]}:`, promiseResult.value);
} else {
console.error(`Error al procesar el archivo ${files[index]}:`, promiseResult.reason);
}
});
})
.catch((error) => {
console.error(‘Error general:’, error);
});
«`

Conclusión

En resumen, allSetteled() es una herramienta valiosa para manejar promesas en JavaScript. Al usarla en proyectos futuros, podrás garantizar que todas las promesas hayan finalizado y tomar decisiones basadas en el estado de cada una. Además, al utilizar esta función, podrás evitar errores comunes como la pérdida de datos o la ejecución de acciones innecesarias debido a promesas no resueltas.

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.