p1 = new Promise(function(s) { setTimeout(function() { s(1000); }, 1000); });
p2 = new Promise(function(s) { setTimeout(function() { s(3000); }, 3000); });
p3 = new Promise(function(s) { setTimeout(function() { s(5000); }, 5000); });
promises = new Set([p1, p2, p3]);
p1.finally(() => promises.delete(p1));
p2.finally(() => promises.delete(p2));
p3.finally(() => promises.delete(p3));
setTimeout(async function() {
result = await Promise.race([...promises]);
console.log(result);
}, 2000);