Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const displaySeparation = payload => new Promise((resolve, reject) => {
- if (!payload || !payload.title) return reject('No title !')
- console.log(new Date(), `-- ${payload.title} --------------------------------------`)
- resolve()
- })
- const readSomething = payload => new Promise((resolve, reject) => {
- if (!payload || !payload.numbers) return reject('No numbers !')
- console.log(new Date(), 'Adding numbers')
- payload.numbers.push(8)
- payload.numbers.push(4)
- setTimeout(() => {
- resolve()
- }, 2000)
- })
- const addValue = value => payload => new Promise((resolve, reject) => {
- if (!payload || !payload.numbers) return reject('No numbers !')
- console.log(new Date(), `Adding ${value}`)
- payload.numbers.push(value)
- setTimeout(() => {
- resolve()
- }, 1000)
- })
- const doSomething = payload => new Promise((resolve, reject) => {
- if (!payload || !payload.numbers) return reject('No numbers !')
- console.log(new Date(), 'Making the sum of numbers')
- payload.result = payload.numbers.reduce((a, b) => a + b)
- setTimeout(() => {
- resolve()
- }, 3000)
- })
- const writeSomething = payload => new Promise((resolve, reject) => {
- if (!payload || !payload.numbers || !payload.result) return reject('No result !')
- console.log(new Date(), `${payload.numbers.join(' + ')} = ${payload.result}`)
- setTimeout(() => {
- resolve()
- }, 1000)
- })
- // -- Middlewares style system ------------------------------------------------
- const createProcess = tasks => payload => tasks.reduce((promiseChain, task) => promiseChain.then(() => Array.isArray(task) ? createProcess(task)(payload) : task(payload)), Promise.resolve())
- // -- Exec --------------------------------------------------------------------
- const fullCalc = createProcess([readSomething, doSomething, writeSomething])
- const makeSomething = createProcess([displaySeparation, fullCalc])
- const makeAnotherThing = createProcess([displaySeparation, doSomething, writeSomething])
- const merged = createProcess([makeSomething, readSomething, doSomething, writeSomething])
- const recursive = createProcess([
- readSomething,
- [
- addValue(5),
- addValue(7),
- addValue(9)
- ],
- doSomething,
- writeSomething
- ])
- makeSomething({ title: 'Process #1', numbers: [3, 8] })
- .then(() => makeSomething({ title: 'Process #2', numbers: [4, 10] }))
- .then(() => makeAnotherThing({ title: 'Process #3', numbers: [1, 2, 3] }))
- .then(() => makeAnotherThing({ title: 'Process #4', numbers: [7, 6, 9] }))
- .then(() => merged({ title: 'Process #5', numbers: [1, 4, 9] }))
- .then(() => recursive({ title: 'Process #1', numbers: [3, 8] }))
- .catch(error => console.error(error))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement