https://github.com/kessler/node-command-queue
A command queue
https://github.com/kessler/node-command-queue
javascript node-module nodejs npm-module
Last synced: about 2 months ago
JSON representation
A command queue
- Host: GitHub
- URL: https://github.com/kessler/node-command-queue
- Owner: kessler
- License: mit
- Created: 2017-09-03T18:20:25.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-08-18T21:26:14.000Z (over 1 year ago)
- Last Synced: 2025-03-08T08:12:40.381Z (about 2 months ago)
- Topics: javascript, node-module, nodejs, npm-module
- Language: JavaScript
- Size: 178 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# command-queue
**a command queue**
## example
`npm install --save @kessler/command-queue`
```js
const { CommandQueue, Command, haltCommand } = require('@kessler/command-queue')class MyCommand extends Command {
async execute(state) {
await doSomething()
}async undo(state) {
await undoSomething()
}
}class MultiCommand extends Command {
async execute(state, queue /*executing queue reference*/ ) {
const resultOfSomething = await doSomething()
if (!resultOfSomething) {
return haltCommand
}
// returned command will execute after this command
// same as enqueuing two commands but happens at
// "runtime". Does not apply to undo
return new MyCommand()
}async undo(state) {
await undoSomething()
}
}let queue = new CommandQueue()
queue.enqueue(new MyCommand())
// once MultiCommand is executed, another MyCommand is injected into the queue
// to be executed immediately after
queue.enqueue(new MultiCommand())
queue.enqueue(new MyCommand())
queue.enqueue(new MyCommand())queue.on('enqueue', (command, queue) => {})
queue.on('before execute', (command, lastResult, queue) => {})
queue.on('after execute', (command, result, queue) => {})
queue.on('before undo', (command, lastResult, queue) => {})
queue.on('after undo', (command, undoResult, queue) => {})const state = await queue.executeStep(2, { foo: 'bar' }) // execute 2 with initial state
await queue.execute(state) // execute the rest
await queue.undoStep() // undo 1
await queue.undo() // undo the rest
```## license
[MIT](http://opensource.org/licenses/MIT) © Yaniv Kessler