# ordem
**Repository Path**: mirrors_dwyl/ordem
## Basic Information
- **Project Name**: ordem
- **Description**: :checkered_flag: ultra-simple ordered task runner for Node.js and Browser. Run your asynchronous functions predictably in series.
- **Primary Language**: Unknown
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-08-08
- **Last Updated**: 2026-01-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ordem - ordered task runner
[](https://travis-ci.org/dwyl/ordem)
[](http://codecov.io/github/dwyl/ordem?branch=master)
[](https://david-dm.org/dwyl/ordem)
[](https://david-dm.org/dwyl/ordem?type=dev)
[](https://github.com/dwyl/ordem/issues)
[](http://hits.dwyl.io/dwyl/ordem)

***ordem*** is a ***synchronous*** (ordered)
**task runner** for Node.js and Client web applications
for when you need to run a list of functions in a specific order.
## Why?
JavaScript is ***synchronous*** *and* ***single-threaded***, but when multiple
statements are called in succession,
**results** ***can*** **be returned** in an
***unexpected order***
... Often we need to run a sequence of tasks in a *specific* order.
## What?
Lets you run a series of JavaScript functions/methods in a specific order and then execute a callback (*once*) at the end.
## How?
### install from npm
```sh
npm install ordem --save-dev
```
### Usage
#### Node.js
```js
var ordem = require('ordem'); // load the module
ordem([
function(callback){
// perform the first task
callback(null, 'one');
},
function(arg1, arg2, callback){
// perform second task
callback(null, 'two');
},
function(callback){
// perform third task, etc.
callback(null, 'done');
}
], function callback(err, result) {
// result now equals 'done'
// callback only gets called once!
});
```
#### Browser
**Tip**: don't try to load the script directly from GitHub (they don't like that...) instead use https://raw.githubusercontent.com/dwyl/ordem/master/index.js
in your html:
```js
```
see: example/**index.html** for ***copy-pasteable example code***.
# tl;dr
We needed this for [**alvo**](https://github.com/dwyl/alvo) our ***automated browser test runner***. But its *useable* ***anywhere that runs JavaScript***!
## Background Reading
+ When is JavaScript Synchronous?
http://stackoverflow.com/questions/2035645/when-is-javascript-synchronous
+ Is javascript guaranteed to be single-threaded?
http://stackoverflow.com/questions/2734025/is-javascript-guaranteed-to-be-single-threaded
+ IIFE with global 'this':
http://stackoverflow.com/questions/10314891/how-to-use-functionglobal-this
+ What is the difference between call and apply?
http://stackoverflow.com/questions/1986896/what-is-the-difference-between-call-and-apply
+ what is the difference in throw new Error and throw(object): http://stackoverflow.com/questions/9156176/javascript-what-is-the-difference-in-throw-new-error-and-throwobject
+ Which Async Javascript Libraries Should I Use? https://www.airpair.com/javascript/posts/which-async-javascript-libraries-should-i-use ( a better *first* question would be: when do I need to run tasks asynchronously...? )
## Name?
All the "good" names are taken.
So we used the Portuguese/Spanish word for "*orderly*"
see: https://translate.google.com/#auto/en/ordem
**Interesting fact**: the word *ordem* is featured on the Brazilian flag:

one of only [16 countries](https://answers.yahoo.com/question/index?qid=20091110134459AAsHxyL) to feature words on a flag.
they obviously feel quite passionately about it.
so do we.
Also, whenever I hear the word "*order*" I think of:
[](https://youtu.be/86NkAeSxhVI?t=1m37s "Everything seems to be in order")
Austin Powers 4 is "*in development*" ... http://www.imdb.com/title/tt1218992/ #[**YeahBaby**](https://www.youtube.com/watch?v=x4KEWEi5hE4)