Created
September 25, 2018 07:03
-
-
Save aescarcha/61b1cb64515686f23fcfa9490db31dda to your computer and use it in GitHub Desktop.
Javascript async / await resolving promises at the same time test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Simple gist to test parallel promise resolution when using async / await | |
function promiseWait(time) { | |
return new Promise((resolve, reject) => { | |
setTimeout(() => { | |
resolve(true); | |
}, time); | |
}); | |
} | |
async function test() { | |
return [ | |
await promiseWait(1000), | |
await promiseWait(5000), | |
await promiseWait(9000), | |
await promiseWait(3000), | |
] | |
} | |
async function test2() { | |
return { | |
'aa': await promiseWait(1000), | |
'bb': await promiseWait(5000), | |
'cc': await promiseWait(9000), | |
'dd': await promiseWait(3000), | |
} | |
} | |
async function test3() { | |
return await { | |
'aa': promiseWait(1000), | |
'bb': promiseWait(5000), | |
'cc': promiseWait(9000), | |
'dd': promiseWait(3000), | |
} | |
} | |
async function test4() { | |
const p1 = promiseWait(1000); | |
const p2 = promiseWait(5000); | |
const p3 = promiseWait(9000); | |
const p4 = promiseWait(3000); | |
return { | |
'aa': await p1, | |
'bb': await p2, | |
'cc': await p3, | |
'dd': await p4, | |
}; | |
} | |
async function test5() { | |
return await Promise.all([ | |
await promiseWait(1000), | |
await promiseWait(5000), | |
await promiseWait(9000), | |
await promiseWait(3000), | |
]); | |
} | |
async function test6() { | |
return await Promise.all([ | |
promiseWait(1000), | |
promiseWait(5000), | |
promiseWait(9000), | |
promiseWait(3000), | |
]); | |
} | |
async function test7() { | |
const p1 = promiseWait(1000); | |
const p2 = promiseWait(5000); | |
const p3 = promiseWait(9000); | |
return { | |
'aa': await p1, | |
'bb': await p2, | |
'cc': await p3, | |
'dd': await promiseWait(3000), | |
}; | |
} | |
let start = Date.now(); | |
test().then((res) => { | |
console.log('Test Done, elapsed', (Date.now() - start) / 1000, res); | |
start = Date.now(); | |
test2().then((res) => { | |
console.log('Test2 Done, elapsed', (Date.now() - start) / 1000, res); | |
start = Date.now(); | |
test3().then((res) => { | |
console.log('Test3 Done, elapsed', (Date.now() - start) / 1000, res); | |
start = Date.now(); | |
test4().then((res) => { | |
console.log('Test4 Done, elapsed', (Date.now() - start) / 1000, res); | |
start = Date.now(); | |
test5().then((res) => { | |
console.log('Test5 Done, elapsed', (Date.now() - start) / 1000, res); | |
start = Date.now(); | |
test6().then((res) => { | |
console.log('Test6 Done, elapsed', (Date.now() - start) / 1000, res); | |
}); | |
start = Date.now(); | |
test7().then((res) => { | |
console.log('Test7 Done, elapsed', (Date.now() - start) / 1000, res); | |
}); | |
}); | |
}); | |
}); | |
}); | |
}); | |
/* | |
Test Done, elapsed 18.006 [ true, true, true, true ] | |
Test2 Done, elapsed 18.009 { aa: true, bb: true, cc: true, dd: true } | |
Test3 Done, elapsed 0 { aa: Promise { <pending> }, | |
bb: Promise { <pending> }, | |
cc: Promise { <pending> }, | |
dd: Promise { <pending> } } | |
Test4 Done, elapsed 9 { aa: true, bb: true, cc: true, dd: true } | |
Test5 Done, elapsed 18.008 [ true, true, true, true ] | |
Test6 Done, elapsed 9.003 [ true, true, true, true ] | |
Test7 Done, elapsed 12.007 { aa: true, bb: true, cc: true, dd: true } | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment