项目作者: kessler

项目描述 :
A command queue
高级语言: JavaScript
项目地址: git://github.com/kessler/node-command-queue.git
创建时间: 2017-09-03T18:20:25Z
项目社区:https://github.com/kessler/node-command-queue

开源协议:MIT License

下载


command-queue

a command queue

example

npm install --save @kessler/command-queue

  1. const { CommandQueue, Command, haltCommand } = require('@kessler/command-queue')
  2. class MyCommand extends Command {
  3. async execute(state) {
  4. await doSomething()
  5. }
  6. async undo(state) {
  7. await undoSomething()
  8. }
  9. }
  10. class MultiCommand extends Command {
  11. async execute(state, queue /*executing queue reference*/ ) {
  12. const resultOfSomething = await doSomething()
  13. if (!resultOfSomething) {
  14. return haltCommand
  15. }
  16. // returned command will execute after this command
  17. // same as enqueuing two commands but happens at
  18. // "runtime". Does not apply to undo
  19. return new MyCommand()
  20. }
  21. async undo(state) {
  22. await undoSomething()
  23. }
  24. }
  25. let queue = new CommandQueue()
  26. queue.enqueue(new MyCommand())
  27. // once MultiCommand is executed, another MyCommand is injected into the queue
  28. // to be executed immediately after
  29. queue.enqueue(new MultiCommand())
  30. queue.enqueue(new MyCommand())
  31. queue.enqueue(new MyCommand())
  32. queue.on('enqueue', (command, queue) => {})
  33. queue.on('before execute', (command, lastResult, queue) => {})
  34. queue.on('after execute', (command, result, queue) => {})
  35. queue.on('before undo', (command, lastResult, queue) => {})
  36. queue.on('after undo', (command, undoResult, queue) => {})
  37. const state = await queue.executeStep(2, { foo: 'bar' }) // execute 2 with initial state
  38. await queue.execute(state) // execute the rest
  39. await queue.undoStep() // undo 1
  40. await queue.undo() // undo the rest

license

MIT © Yaniv Kessler