Advertisement
TheTintin

middlewares like with promises

Aug 15th, 2019
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // -- Async tasks -------------------------------------------------------------
  2.  
  3. const displaySeparation = payload => new Promise((resolve, reject) => {
  4.     if (!payload || !payload.title) return reject('No title !')
  5.  
  6.     console.log(new Date(), `-- ${payload.title} --------------------------------------`)
  7.     resolve()
  8. })
  9.  
  10. const readSomething = payload => new Promise((resolve, reject) => {
  11.     if (!payload || !payload.numbers) return reject('No numbers !')
  12.  
  13.     console.log(new Date(), 'Adding numbers')
  14.     payload.numbers.push(8)
  15.     payload.numbers.push(4)
  16.  
  17.     setTimeout(() => {
  18.         resolve()
  19.     }, 2000)
  20. })
  21.  
  22. const doSomething = payload => new Promise((resolve, reject) => {
  23.     if (!payload || !payload.numbers) return reject('No numbers !')
  24.  
  25.     console.log(new Date(), 'Making the sum of numbers')
  26.     payload.result = payload.numbers.reduce((a, b) => a + b)
  27.  
  28.     setTimeout(() => {
  29.         resolve()
  30.     }, 3000)
  31. })
  32.  
  33. const writeSomething = payload => new Promise((resolve, reject) => {
  34.     if (!payload || !payload.numbers || !payload.result) return reject('No result !')
  35.  
  36.     console.log(new Date(), `${payload.numbers.join(' + ')} = ${payload.result}`)
  37.  
  38.     setTimeout(() => {
  39.         resolve()
  40.     }, 1000)
  41. })
  42.  
  43. // -- Middlewares style system ------------------------------------------------
  44.  
  45. const createProcess = tasks => payload => tasks.reduce((promiseChain, task) => promiseChain.then(() => task(payload)), Promise.resolve())
  46.  
  47. // -- Exec --------------------------------------------------------------------
  48.  
  49. const fullCalc = createProcess([readSomething, doSomething, writeSomething])
  50. const makeSomething = createProcess([displaySeparation, fullCalc])
  51. const makeAnotherThing = createProcess([displaySeparation, doSomething, writeSomething])
  52. const merged = createProcess([makeSomething, readSomething, doSomething, writeSomething])
  53.  
  54. makeSomething({ title: 'Process #1', numbers: [3, 8] })
  55.     .then(() => makeSomething({ title: 'Process #2', numbers: [4, 10] }))
  56.     .then(() => makeAnotherThing({ title: 'Process #3', numbers: [1, 2, 3] }))
  57.     .then(() => makeAnotherThing({ title: 'Process #4', numbers: [7, 6, 9] }))
  58.     .then(() => merged({ title: 'Process #5', numbers: [1, 4, 9] }))
  59.     .catch(error => console.error(error))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement