Skip to content

Instantly share code, notes, and snippets.

@hoony-o-1
Last active December 12, 2017 11:13
Show Gist options
  • Save hoony-o-1/86644a331a450948c64ffb36dd9be287 to your computer and use it in GitHub Desktop.
Save hoony-o-1/86644a331a450948c64ffb36dd9be287 to your computer and use it in GitHub Desktop.
Promise.series - Synchronous version of Promise.all
const PromiseSeries = (arr) => {
if (arr.length > 1) {
const target = arr[0]
const rest = arr.slice(1)
return target.then(() => PromiseSeries(rest))
} else {
return arr[0]
}
}
const test1 = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('Done with test1')
resolve()
}, 1000)
})
}
const test2 = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('Done with test2')
resolve()
}, 1000)
})
}
const failTest = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('Fail with failTest')
reject(new Error('Fail with failTest'))
}, 1000)
})
}
PromiseSeries([test1(), test2()])
.then(() => console.log('All Done!'))
.catch(err => console.error(err))
/**
* 'Done with test1'
* 'Done with test2'
* 'All Done!'
*/
PromiseSeries([test1(), failTest(), test2()])
.then(() => console.log('All Done!'))
.catch(err => console.error(err))
/**
* 'Done with test1'
* 'Error: Fail with failTest'
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment