@ou-imdt/utils
Version:
Utility library for interactive media development
14 lines • 710 B
JavaScript
/**
* dynmaically checks the state of a list of Promises, only resolving when all listed Promises are
* (equivalant to Promise.all but allows the list to be dynamically updated after being called)
* @param {array[Promise]} promises - dynamic list of Promise objects
* @returns {Promise<array>}
*/
export default async function isPromiseResolvedAll(promises) {
const { promise, resolve } = Promise.withResolvers();
const current = [...promises];
const data = await Promise.all(promises);
const hasChanged = (promises.length !== current.length || promises.some((el, index) => el !== current[index]));
hasChanged ? resolve(await isPromiseResolvedAll(promises)) : resolve(data);
return promise;
};