Skip to content

Execute functions that return via callback in order, but pause if a function is marked as a gate.

License

Notifications You must be signed in to change notification settings

senecajs/gate-executor

Repository files navigation

gate-executor

npm version Build Status Coverage Status Dependency Status Gitter chat

A work queue that can be gated, stopping to wait for sub-queues to complete.

Annotated Source

A work execution queue that provides gating. Work items submitted to the queue are called in order, and execute concurrently. However, if the queue is gated, then a sub-queue is created, and work items added to the sub-queue must complete first.

Gating operates to any depth, allowing you to form a tree-structured queue that must complete breadth-first.

The queue also handles timeouts, so that failing work items do not block processing. Timeouts use a shared setInterval, so are nice and efficient.

Used by the Seneca microservice framework to implement plugin initialisation.

Usage

var GateExecutor = require('gate-executor')

var ge = GateExecutor()

ge.add({
  fn: function first (done) {
    console.log('first')
    done()
  }
})

// create a gate
var subge = ge.gate()

ge.add({
  fn: function second (done) {
    console.log('second')
    done()
  }
})

// this needs to complete before 'second' can run
subge.add({
  fn: function second (done) {
    console.log('third')
    done()
  }
})

ge.start(function () {
  console.log('done')
  done()
})

// prints:
//   first
//   third
//   second
//   done

For detailed information, and API descriptions, see the Annotated Source

Support

If you're using this module, feel free to contact me on twitter if you have any questions! :) @rjrodger

Testing

npm test

About

Execute functions that return via callback in order, but pause if a function is marked as a gate.

Resources

License

Stars

Watchers

Forks

Packages

No packages published