# temporal

> Non-blocking, temporal task sequencing and scheduling.

Latest version **0.7.1** (published 2018-08-08) · 0 weekly downloads

## Install

```sh
npm install temporal
pnpm add temporal
yarn add temporal
bun add temporal
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.7.1 |
| Published | 2018-08-08 |
| First published | 2012-10-30 |
| Weekly downloads | 0 |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=0.10.0 |
| Dependencies | 0 |
| Unpacked size | 15.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 85 |
| Author | Rick Waldron |
| Maintainers | dtex, rwaldron |
| Keywords | schedule, task, settimeout, setinterval, nexttick, process, sequence, sequencing, loop, repeat, wait, delay, sleep |

## Links

- npm: https://www.npmjs.com/package/temporal
- Repository: https://github.com/rwaldron/temporal
- Issues: https://github.com/rwaldron/temporal/issues
- npm.io page: https://npm.io/package/temporal

## Alternatives

- [@commercetools/sync-actions](https://npm.io/package/@commercetools/sync-actions.md) — 25.1K weekly downloads
- [cwait](https://npm.io/package/cwait.md) — 21.4K weekly downloads
- [@ledgerhq/hw-app-cosmos](https://npm.io/package/@ledgerhq/hw-app-cosmos.md) — 4.2K weekly downloads
- [@financial-times/o-loading](https://npm.io/package/@financial-times/o-loading.md) — 2.8K weekly downloads
- [fa](https://npm.io/package/fa.md) — 185 weekly downloads

## Recent versions

- 0.7.1 (latest) — 2018-08-08
- 0.7.0 — 2018-08-06
- 0.6.0 — 2017-06-28
- 0.5.0 — 2015-11-06
- 0.4.1 — 2015-08-31
- 0.4.0 — 2014-12-19
- 0.3.8 — 2014-07-12
- 0.3.7 — 2014-03-06
- 0.3.6 — 2014-03-06
- 0.3.5 — 2014-03-06
- 0.3.4 — 2014-03-06
- 0.3.3 — 2014-02-04
- 0.3.2 — 2014-01-31
- 0.3.1 — 2014-01-29
- 0.3.0 — 2014-01-29
- … 11 more at https://npm.io/package/temporal/versions

## README

# temporal


[![Build Status](https://travis-ci.org/rwaldron/temporal.svg)](https://travis-ci.org/rwaldron/temporal)

Non-blocking, temporal task sequencing. `temporal` does NOT use `setTimeout` or `setInterval`, however there is a cost for using "recursive" `setImmediate` to create an extremely fast, async execution loop. CPU usage is expected to peak when using `temporal`, because the internal ticker needs to execute as fast as possible and as many times per second as possible. It's this speed that allows `temporal` to review the internal schedule for tasks to execute more than once per millisecond, which is needed to create preferential execution cycles for hardware programming. 

`temporal` is for writing timing sensitive programs that are expected to be the primary process running on a given system, where the power source itself is tuned to accommodate _that program_ specifically. Concrete examples include: 

- walking robots (autonomous and remote control bipeds, quadrupeds or hexapods)
- driving robots (autonomous and remote control rovers)
- flying robots (autonomous and remote control single and multi-rotor helicopter)
- water based robots (underwater rovs, surface boat-likes)

`temporal` allows for sub-millisecond task scheduling through us of the resolution method. 

`temporal` is not good for sparse task scheduling. 


## Presentations

- [EmpireJS](https://dl.dropboxusercontent.com/u/3531958/empirejs/index.html)
- [CascadiaJS](https://dl.dropboxusercontent.com/u/3531958/cascadiajs/index.html)




## Getting Started

```bash
npm install temporal
```


## Examples

```javascript
var temporal = require("temporal");

temporal.on("idle", function() {
  console.log("Temporal is idle");  
});

// Wait 500 milliseconds, execute a task
temporal.delay(500, function() {

  console.log("500ms later...");

});

// Loop every n milliseconds, executing a task each time
temporal.loop(500, function() {

  console.log("Every 500ms...");

  // |this| is a reference to the temporal instance
  // use it to cancel the loop by calling:
  //
  this.stop();

  // The number of times this loop has been executed:
  this.called; // number

  // The first argument to the callback is the same as |this|
});


// Queue a sequence of tasks: delay, delay
// Each delay time is added to the prior delay times.
temporal.queue([
  {
    delay: 500,
    task: function() {
      // Executes 500ms after temporal.queue(...) is called
    }
  },
  {
    delay: 500,
    task: function() {
      // Executes 1000ms after temporal.queue(...) is called

      // The last "delay" task will emit an "ended" event
    }
  }
]);

// Queue a sequence of tasks: delay then loop
// Each delay time is added to the prior delay times.
temporal.queue([
  {
    delay: 500,
    task: function() {
      // Executes 500ms after temporal.queue(...) is called
    }
  },
  {
    loop: 100,
    task: function() {
      // Executes 600ms after temporal.queue(...) is called

      // Executes every 100ms thereafter.
    }
  }
]);
```

```javascript
var temporal = require("temporal");

temporal.on("idle", function() {
  console.log("Temporal is idle");  
});

// Set temporal resolution to 0.1ms
temporal.resolution(0.1);

// Wait 0.7 milliseconds, execute a task
temporal.delay(0.7, function() {

  console.log("0.7ms later...");

});
```


## Contributing
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [grunt](https://github.com/gruntjs/grunt).


## License
See LICENSE file.

---
_Source: https://npm.io/package/temporal · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
