I have the following promise, but it seems to resolve without me even awaiting it if I run this code in ts playground.
const promises = [later(1000)];
function later(delay:number) {
return new Promise<void>(function(resolve) {
setTimeout(() => {
console.log('test');
resolve();
}, delay);
});
}
I only want it to execute when I call
await Promise.all(promises);
>Solution :
As other posts/comments said, later(1000) is evaluated right away and don’t wait for your await Promise.all call to run the promise code.
you could achieve that by doing the following:
const promises = [() => later(1000)];
function later(delay:number) {
return new Promise<void>(function(resolve) {
setTimeout(() => {
console.log('test');
resolve();
}, delay);
});
}
await Promise.all(promises.map(f => f()));