Skip to content

Commit fff9c9f

Browse files
Merge pull request then#25 from calvinmetcalf/add-es6
fixes then#23 by adding resolve, reject, cast, race, and prototype.catch
2 parents 7178ebe + 97341a6 commit fff9c9f

File tree

3 files changed

+106
-26
lines changed

3 files changed

+106
-26
lines changed

index.js

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ var UNDEFINED = new ValuePromise(undefined)
3232
var ZERO = new ValuePromise(0)
3333
var EMPTYSTRING = new ValuePromise('')
3434

35-
Promise.from = function (value) {
35+
Promise.from = Promise.cast = function (value) {
3636
if (value instanceof Promise) return value
3737

3838
if (value === null) return NULL
@@ -131,6 +131,7 @@ Promise.prototype.done = function (onFulfilled, onRejected) {
131131
})
132132
})
133133
}
134+
134135
Promise.prototype.nodeify = function (callback) {
135136
if (callback === null || typeof callback == 'undefined') return this
136137

@@ -144,3 +145,28 @@ Promise.prototype.nodeify = function (callback) {
144145
})
145146
})
146147
}
148+
149+
Promise.prototype.catch = function (onRejected) {
150+
return this.then(null, onRejected);
151+
}
152+
153+
154+
Promise.resolve = function (value) {
155+
return new Promise(function (resolve) {
156+
resolve(value);
157+
});
158+
}
159+
160+
Promise.reject = function (value) {
161+
return new Promise(function (resolve, reject) {
162+
reject(value);
163+
});
164+
}
165+
166+
Promise.race = function (values) {
167+
return new Promise(function (resolve, reject) {
168+
values.map(function(value){
169+
Promise.cast(value).then(resolve, reject);
170+
})
171+
});
172+
}

test/adapter-a.js

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,17 @@
11
var Promise = require('../');
22

3-
module.exports = {
4-
deferred: function () {
5-
var resolve, reject;
6-
var promise = new Promise(function (_resolve, _reject) {
7-
resolve = _resolve;
8-
reject = _reject;
9-
});
10-
return {
11-
promise: promise,
12-
resolve: resolve,
13-
reject: reject
14-
};
15-
},
16-
resolved: function (value) {
17-
return Promise.from(value);
18-
},
19-
rejected: function (value) {
20-
return new Promise(function (resolve, reject) { reject(value); });
21-
}
22-
}
3+
4+
exports.deferred = function () {
5+
var resolve, reject;
6+
var promise = new Promise(function (_resolve, _reject) {
7+
resolve = _resolve;
8+
reject = _reject;
9+
});
10+
return {
11+
promise: promise,
12+
resolve: resolve,
13+
reject: reject
14+
};
15+
};
16+
exports.resolved = Promise.resolve;
17+
exports.rejected = Promise.reject;

test/extensions-tests.js

Lines changed: 64 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,70 @@ describe('extensions', function () {
2525
assert(promise === Promise.from(promise))
2626
})
2727
})
28+
describe('if passed a thenable', function () {
29+
describe('using then', function () {
30+
it('assimilates it', function (done) {
31+
var i = 2
32+
var promise = Promise.from(thenable)
33+
var promiseRejected = Promise.from(thenableRejected)
34+
assert(promise instanceof Promise)
35+
assert(promiseRejected instanceof Promise)
36+
promise.then(function (res) {
37+
assert(res === sentinel)
38+
if (0 === --i) done()
39+
})
40+
.then(null, done)
41+
promiseRejected.then(null, function (err) {
42+
assert(err === sentinel)
43+
if (0 === --i) done()
44+
})
45+
.then(null, done)
46+
})
47+
})
48+
describe('using catch', function () {
49+
it('assimilates it', function (done) {
50+
var i = 2
51+
var promise = Promise.from(thenable)
52+
var promiseRejected = Promise.from(thenableRejected)
53+
assert(promise instanceof Promise)
54+
assert(promiseRejected instanceof Promise)
55+
promise.then(function (res) {
56+
assert(res === sentinel)
57+
if (0 === --i) done()
58+
})
59+
.catch(done)
60+
promiseRejected.catch(function (err) {
61+
assert(err === sentinel)
62+
if (0 === --i) done()
63+
})
64+
.catch(done)
65+
})
66+
})
67+
})
68+
describe('if passed a value', function () {
69+
it('wraps it in a promise', function (done) {
70+
var promise = Promise.from(sentinel)
71+
.then(function (res) {
72+
assert(res === sentinel)
73+
done()
74+
})
75+
assert(promise instanceof Promise)
76+
assert(Promise.from(sentinel) instanceof Promise)
77+
assert(Promise.from(sentinel).constructor === Promise)
78+
})
79+
})
80+
})
81+
describe('Promise.cast', function () {
82+
describe('if passed a true promise', function () {
83+
it('returns it directly', function () {
84+
assert(promise === Promise.cast(promise))
85+
})
86+
})
2887
describe('if passed a thenable', function () {
2988
it('assimilates it', function (done) {
3089
var i = 2
31-
var promise = Promise.from(thenable)
32-
var promiseRejected = Promise.from(thenableRejected)
90+
var promise = Promise.cast(thenable)
91+
var promiseRejected = Promise.cast(thenableRejected)
3392
assert(promise instanceof Promise)
3493
assert(promiseRejected instanceof Promise)
3594
promise.then(function (res) {
@@ -46,14 +105,14 @@ describe('extensions', function () {
46105
})
47106
describe('if passed a value', function () {
48107
it('wraps it in a promise', function (done) {
49-
var promise = Promise.from(sentinel)
108+
var promise = Promise.cast(sentinel)
50109
.then(function (res) {
51110
assert(res === sentinel)
52111
done()
53112
})
54113
assert(promise instanceof Promise)
55-
assert(Promise.from(sentinel) instanceof Promise)
56-
assert(Promise.from(sentinel).constructor === Promise)
114+
assert(Promise.cast(sentinel) instanceof Promise)
115+
assert(Promise.cast(sentinel).constructor === Promise)
57116
})
58117
})
59118
})

0 commit comments

Comments
 (0)