Skip to content

Commit 3025559

Browse files
author
Forbes Lindesay
committed
Add builds for domains and setImmedaite
This adds two additional builds, one for environments where there is an extremely efficient setImmedaite implementation and asap is just unnecessary overhead and another for environments where support for domains is essential.
1 parent 5f214e1 commit 3025559

File tree

7 files changed

+53
-10
lines changed

7 files changed

+53
-10
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@ components
22
build
33
node_modules
44
/lib
5+
/domains
6+
/setimmediate

Readme.md

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Note that the [es5-shim](https://github.com/es-shims/es5-shim) must be loaded be
4343

4444
## Usage
4545

46-
The example below shows how you can load the promise library (in a way that works on both client and server). It then demonstrates creating a promise from scratch. You simply call `new Promise(fn)`. There is a complete specification for what is returned by this method in [Promises/A+](http://promises-aplus.github.com/promises-spec/).
46+
The example below shows how you can load the promise library (in a way that works on both client and server using node or browserify). It then demonstrates creating a promise from scratch. You simply call `new Promise(fn)`. There is a complete specification for what is returned by this method in [Promises/A+](http://promises-aplus.github.com/promises-spec/).
4747

4848
```javascript
4949
var Promise = require('promise');
@@ -56,6 +56,26 @@ var promise = new Promise(function (resolve, reject) {
5656
});
5757
```
5858

59+
If you need [domains](https://iojs.org/api/domain.html) support, you should instead use:
60+
61+
```js
62+
var Promise = require('promise/domains');
63+
```
64+
65+
If you are in an environment that implements `setImmediate` and don't want the optimisations provided by asap, you can use:
66+
67+
```js
68+
var Promise = require('promise/setimmediate');
69+
```
70+
71+
If you only want part of the features, e.g. just a pure ES6 polyfill:
72+
73+
```js
74+
var Promise = require('promise/lib/es6-extensions');
75+
// or require('promise/domains/es6-extensions');
76+
// or require('promise/setimmediate/es6-extensions');
77+
```
78+
5979
## API
6080

6181
Before all examples, you will need:

build.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,22 @@ fs.readdirSync(__dirname + '/src').forEach(function (filename) {
4848
var out = fixup(src);
4949
fs.writeFileSync(__dirname + '/lib/' + filename, out);
5050
});
51+
52+
rimraf.sync(__dirname + '/domains/');
53+
fs.mkdirSync(__dirname + '/domains/');
54+
fs.readdirSync(__dirname + '/src').forEach(function (filename) {
55+
var src = fs.readFileSync(__dirname + '/src/' + filename, 'utf8');
56+
var out = fixup(src);
57+
out = out.replace(/require\(\'asap\/raw\'\)/g, "require('asap')");
58+
fs.writeFileSync(__dirname + '/domains/' + filename, out);
59+
});
60+
61+
rimraf.sync(__dirname + '/setimmediate/');
62+
fs.mkdirSync(__dirname + '/setimmediate/');
63+
fs.readdirSync(__dirname + '/src').forEach(function (filename) {
64+
var src = fs.readFileSync(__dirname + '/src/' + filename, 'utf8');
65+
var out = fixup(src);
66+
out = out.replace(/var asap \= require\(\'([a-z\/]+)\'\)/g, '');
67+
out = out.replace(/asap/g, "setImmediate");
68+
fs.writeFileSync(__dirname + '/setimmediate/' + filename, out);
69+
});

index.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
11
'use strict';
22

3-
module.exports = require('./lib/core.js')
4-
require('./lib/done.js')
5-
require('./lib/finally.js')
6-
require('./lib/es6-extensions.js')
7-
require('./lib/node-extensions.js')
3+
module.exports = require('./lib')

src/done.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
'use strict';
22

33
var Promise = require('./core.js')
4-
var asap = require('asap')
54

65
module.exports = Promise
76
Promise.prototype.done = function (onFulfilled, onRejected) {
87
var self = arguments.length ? this.then.apply(this, arguments) : this
98
self.then(null, function (err) {
10-
asap(function () {
9+
setTimeout(function () {
1110
throw err
12-
})
11+
}, 0)
1312
})
1413
}

src/es6-extensions.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
//This file contains the ES6 extensions to the core Promises/A+ API
44

55
var Promise = require('./core.js')
6-
var asap = require('asap')
6+
var asap = require('asap/raw')
77

88
module.exports = Promise
99

src/index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
'use strict';
2+
3+
module.exports = require('./core.js')
4+
require('./done.js')
5+
require('./finally.js')
6+
require('./es6-extensions.js')
7+
require('./node-extensions.js')

0 commit comments

Comments
 (0)