Skip to content

Latest commit

 

History

History
32 lines (20 loc) · 1.99 KB

tasks-and-prompts.markdown

File metadata and controls

32 lines (20 loc) · 1.99 KB

Title: Tasks and Prompts -- Implementing Simple Work Queues Author: R. S. Doiel Date: Sun, 28 Feb 2010 00:50:22 GMT Node: v0.1.103

Sometimes all you really need is orderly execution not blocking I/O to get the job done. Tasks and prompts is a light weight implementation of the work queue design pattern.

Implementing Simple Work Queues

The other day I was converting a couple Bash installer scripts to node scripts. I recognized a familiar design pattern -- the work queue. Here's the requirements for a typical work queue approach -

  • tasks are queued, first in first out (i.e. tracked)
  • tasks once started continue without further intervention
  • tasks are independent (i.e. task A does not depend on task B or visa versa)
  • tasks are execute once

My requirements

  • tasks fired in sequence without concern for when they complete
  • some tasks required a prompt and response before firing
  • I wanted to queue tasks and prompts before running the work queue

A simple JavaScript array works fine as a first in first out queue (i.e. shift() pops the zeroth position off). An object's properties can keep track of what text I wanted to displayed; the callback to be fired; and if I need to show a prompt or get a response when firing a callback. tasks-and-prompts.js is a simple example of doing that:

<tasks-and-prompts/tasks-and-prompts.js>

Explanations

In this simple example I prompt the user to answer a question then count to three. Pretty trivial but it's an implantation of a the work queue pattern. That pattern is common in installation or management scripts. The only problem with the example above is that it isn't setup as a node module ... wait I did that already! See github.com/rsdoiel/nshtools. nshtools.js includes a more elaborate implementation and with features like command line option processing and high level file commands like cp and mv. The github wiki and the README.md file for nshtools have some more short examples for your enjoyment.

Have fun!