# asyngleton

> asynchronously generate singletons

Latest version **0.1.3** (published 2013-04-02) · 0 weekly downloads

## Install

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

## Health

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

Positive: no vulnerabilities.

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

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.3 |
| Published | 2013-04-02 |
| First published | 2012-04-26 |
| Weekly downloads | 0 |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 2 |
| Author | Craig Condon |
| Maintainers | architectd |

## Links

- npm: https://www.npmjs.com/package/asyngleton
- Repository: https://github.com/crcn/asyngleton.js
- npm.io page: https://npm.io/package/asyngleton

## Recent versions

- 0.1.3 (latest) — 2013-04-02
- 0.1.2 — 2013-04-02
- 0.1.1 — 2013-03-16
- 0.1.0 — 2013-03-15
- 0.0.2 — 2012-05-29
- 0.0.1 — 2012-04-26
- 0.0.0 — 2012-04-26

## README

[![build status](https://secure.travis-ci.org/crcn/asyngleton.js.png)](http://travis-ci.org/crcn/asyngleton.js)
### Example

```javascript

var asyngleton = require('../'),
fs = require('fs');

//called ONCE
var readDir = asyngleton(function(callback) {
	fs.readdir(__dirname, callback);
})

//initializes the singleton method above
readDir(function(err, files) {
	//do stuff
})

//called after there's a result
readDir(function(err, files) {
	//do stuff
});

```


### API

#### asyngleton(factory)

Creates a new asyngleton function.

- `factory` - the factory method for creating the singleton. This is called ONCE.

#### .reset()

Resets the target asyngleton so the factory can be called again.

```javascript

var fs     = require('fs'),
asyngleton = require('asyngleton');

var readDir = asyngleton(function(callback) {
	fs.readdir(__dirname, callback);
});

readDir(function(err, files) {
	
	//make the readDir factory callable again
	readDir.reset();

	//do stuff...
});

```

#### .dictionary()

creates a dictionary of singletons

```javascript

var dict = require('asyngleton').dictionary(),
fs = require('fs');

var readThisDir = dict.get("readThisDir", function(onSingleton) {
	fs.read(__dirname, onSingleton);
});

var readLibDir = dict.get("readLibDir", function(onSingleton) {
	fs.read(__dirname + "/lib", onSingleton);
})

readThisDir(function(err, files) {
	//do stuff
});

readLibDir(function(err, files) {
	//do stuff
});
```

#### dictionary.get(name, factory)

- `name` - the name of the singleton in the dictionary
- `factory` - the factory method incase the singleton doesn't exist


### [Structr](/crcn/structr.js) Integration


```javascript

var structr = require("structr");
structr.mixin(require("asyngleton"));


var TestClass = structr({
		
	/**
	 */

	"singleton load": function(onLoad) {
		fs.readFile(__dirname + "/config.json", onLoad);
	}
});

var test = new TestClass();

test.load(function(config) {
	
});

//fs.readFile is NOT called again at this point
test.load(function(config) {
	
});
```

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