1.0.11 • Published 3 years ago

promiseflow v1.0.11

Weekly downloads
7
License
MIT
Repository
github
Last release
3 years ago

promiseflow

provides series and parallel flow control for promise. using Array to represent tasks in series. using Object to represent tasks in parallel.

series_parallel_input

install

npm install promiseflow

Example

series demo

series

import flowFactory from 'promiseflow'
import Promise from 'es6-promise'
const runFlow = flowFactory(Promise)

const initData = 1
const fun1 = function (data) {
  // expect(data).to.be.equal(1)
  return data + 1
}
const fun2 = function (data) {
  // expect(data).to.be.equal(2)
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(data + 2)
    }, 50)
  })
}
const arr = [fun1, fun2]
runFlow(arr, initData).then(data => {
  // expect(data).to.be.equal(4)
  done()
})

parallel demo

parallel

import flowFactory from 'promiseflow'
import Promise from 'es6-promise'
const runFlow = flowFactory(Promise)

const initData = 1
const fun1 = function (data) {
  // expect(data).to.be.equal(1)
  return data + 1
}
const fun2 = function (data) {
  // expect(data).to.be.equal(1)
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(data + 2)
    }, 50)
  })
}
const fun3 = function (data) {
  // expect(data).to.be.equal(1)
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(data + 3)
    }, 50)
  })
}
const obj = { fun1, fun2, fun3 }
let promise = runFlow(obj, initData)
promise.then(data => {
  // expect(data.fun1).to.be.equal(2)
  // expect(data.fun2).to.be.equal(3)
  // expect(data.fun3).to.be.equal(4)
  // done()
})

series + parallel demo

series_parallel

import flowFactory from 'promiseflow'
import Promise from 'es6-promise'
const runFlow = flowFactory(Promise)

const initData = 1
const fun1 = function (data) {
  // expect(data).to.be.equal(1)
  return data + 1
}
const fun2 = function (data) {
  // expect(data).to.be.equal(2)
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(data + 2)
    }, 50)
  })
}
const fun3 = function (data) {
  // expect(data).to.be.equal(2)
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(data + 3)
    }, 50)
  })
}
const fun4 = function (data) {
  // expect(data.fun2).to.be.equal(4)
  // expect(data.fun3).to.be.equal(5)
  return data.fun2 + data.fun3
}
const arr = [fun1, {
  fun2, fun3
}, fun4]
runFlow(arr, initData).then(data => {
  // expect(data).to.be.equal(9)
  // done()
})

sub flows demo

sub_flow

import flowFactory from 'promiseflow'
import Promise from 'es6-promise'
const runFlow = flowFactory(Promise)

const inData = 1
const subFlows = [{
  sub1: ret => {
    return ret + 1
  },
  sub2: ret => {
    return ret + 2
  }
}, ret => {
  return ret.sub1 + ret.sub2
}]
const fun1 = function (data) {
  // expect(data).to.be.equal(1)
  return new Promise(resolve => {
    setTimeout(() => {
      resolve({
        __flow__: true,
        flows: subFlows,
        inData: data + 1
      })
    }, 50)
  })
}
const fun2 = function (data) {
  // expect(data).to.be.equal(7)
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(data + 2)
    }, 50)
  })
}
const arr = [fun1, fun2]
runFlow(arr, inData).then(data => {
  // expect(data).to.be.equal(9)
  // done()
})

use callback to handle each task

import flowFactory from 'promiseflow'
import Promise from 'es6-promise'
const runFlow = flowFactory(Promise)

const arr = ['series.png', {
  img1: 'parallel.png',
  img2: 'series_parallel.png'
}, 'sub_flow.png']
const callback = (val) => {
  if (typeof val === 'string') {
    return function () {
      return new Promise((resolve, reject) => {
        const img = document.createElement('img')
        img.id = val
        img.onload = () => {
          img.onload = null
          img.onerror = null
          resolve(img.name)
        }
        img.onerror = () => {
          img.onload = null
          img.onerror = null
          reject(new Error(`${val} load failed`))
        }

        img.src = `/base/img/${val}`

        document.body.appendChild(img)
      })
    }
  }

  return val
}
runFlow(arr, '', callback).then(data => {
  // expect(true).to.be.equal(true)
  done()
})

License

MIT

1.0.11

3 years ago

1.0.10

5 years ago

1.0.9

5 years ago

1.0.7

7 years ago

1.0.6

7 years ago

1.0.5

7 years ago

1.0.4

7 years ago

1.0.3

7 years ago

1.0.2

7 years ago

1.0.1

7 years ago

1.0.0

7 years ago