JavaScript: il metodo Promise.allSettled()

JavaScript: il metodo Promise.allSettled()

Questo metodo delle Promise JavaScript è molto utile quando si ha la necessità di reperire tutti i risultati di una serie di Promise.

Promise.allSettled() restituirà sempre un array di oggetti contenenti i risultati dell'esecuzione di più Promise.

Ogni oggetto avrà una proprietà status che indicherà lo stato finale dell'esecuzione di una Promise, ad esempio fullfilled in caso di successo o rejected in caso di errore o eccezione.

Nel caso in cui lo stato indichi che l'operazione ha avuto successo, l'oggetto avrà anche la proprietà value con il risultato restituito dalla Promise. In caso di errore, invece, l'oggetto avrà anche la proprietà reason con i dettagli dell'errore (ad esempio un'istanza dell'oggetto Error).

Facciamo un esempio concreto. Supponiamo di dover verificare se una serie di URL restituiscono un codice di stato HTTP 200 (successo) o di errore (ad esempio 4x o 5x).

Creiamo un'ipotetica funzione che restituisce una Promise che verifica tale stato.


const checkHTTPStatus = url => {
    return new Promise((resolve, reject) => {
        const { status } = request(url);
        if(status >= 400) {
            reject('Down');
        }
        resolve('Up');
    });
};

A questo punto usiamo tale funzione per creare un array di Promise:


const requests = [];
const urls = ['https://test.tld', 'https://test.test', 'https://test.local'];

for(let url of urls) {
    requests.push(checkHTTPStatus(url));
}

Quindi con Promise.allSettled() avremo:


(async() => {

    console.log(await Promise.allSettled(requests));

})();

L'array inviato in console da Promise.allSettled() potrebbe essere:


[
    {
        status: 'fullfilled',
        value: 'Up'
    },
    {
        status: 'rejected',
        reason: 'Down'
    },
    {
        status: 'fullfilled',
        value: 'Up'
    }
]

Essendo questo l'array finale, è semplice filtrare poi i risultati in base alla proprietà status.

Torna su