Skip to content

Commit 6128e13

Browse files
committed
Merge pull request #1 from johnhaley81/synchronous-inspection
Added synchronous methods and tests
2 parents 7710d6d + 6870ae3 commit 6128e13

File tree

2 files changed

+185
-0
lines changed

2 files changed

+185
-0
lines changed

lib/core.js

+31
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,37 @@ function Promise(fn) {
1717
})
1818
}
1919

20+
this.state = state;
21+
22+
this.isFulfilled = function () {
23+
debugger;
24+
return state === true
25+
}
26+
27+
this.isRejected = function () {
28+
return state === false
29+
}
30+
31+
this.isPending = function () {
32+
return state === null
33+
}
34+
35+
this.value = function () {
36+
if (!this.isFulfilled()) {
37+
throw new Error('Cannot get a value of an unfulfilled promise.')
38+
}
39+
40+
return value
41+
}
42+
43+
this.reason = function () {
44+
if (!this.isRejected()) {
45+
throw new Error('Cannot get a rejection reason of a non-rejected promise.')
46+
}
47+
48+
return reason
49+
}
50+
2051
function handle(deferred) {
2152
if (state === null) {
2253
deferreds.push(deferred)

test/synchronous-inspection-tests.js

+154
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
var assert = require('better-assert');
2+
var Promise = require('../');
3+
4+
describe('synchronous-inspection-tests', function () {
5+
it('can poll a promise to see if it is resolved', function () {
6+
var finished = null;
7+
var fulfilledPromise = new Promise(function(resolve, reject) {
8+
var interval = setInterval(function() {
9+
if (finished !== null) {
10+
clearTimeout(interval);
11+
12+
if (finished) {
13+
resolve(true);
14+
}
15+
else {
16+
reject(false);
17+
}
18+
}
19+
}, 10);
20+
});
21+
22+
assert(fulfilledPromise.isPending());
23+
assert(!fulfilledPromise.isFulfilled());
24+
assert(!fulfilledPromise.isRejected());
25+
26+
finished = true;
27+
28+
setTimeout(function () {
29+
assert(fulfilledPromise.isFulfilled());
30+
assert(!fulfilledPromise.isRejected());
31+
assert(fulfilledPromise.value());
32+
assert(!fulfilledPromise.isPending());
33+
}, 30);
34+
});
35+
36+
it('can poll a promise to see if it is rejected', function () {
37+
var finished = null;
38+
var fulfilledPromise = new Promise(function(resolve, reject) {
39+
var interval = setInterval(function() {
40+
if (finished !== null) {
41+
clearTimeout(interval);
42+
43+
if (finished) {
44+
resolve(true);
45+
}
46+
else {
47+
reject(false);
48+
}
49+
}
50+
}, 10);
51+
});
52+
53+
assert(fulfilledPromise.isPending());
54+
assert(!fulfilledPromise.isFulfilled());
55+
assert(!fulfilledPromise.isRejected());
56+
57+
finished = false;
58+
59+
setTimeout(function () {
60+
assert(!fulfilledPromise.isFulfilled());
61+
assert(fulfilledPromise.isRejected());
62+
assert(!fulfilledPromise.reason());
63+
assert(!fulfilledPromise.isPending());
64+
}, 30);
65+
});
66+
67+
it('will throw an error if getting a value of an unfulfilled promise', function () {
68+
var finished = null;
69+
var fulfilledPromise = new Promise(function(resolve, reject) {
70+
var interval = setInterval(function() {
71+
if (finished !== null) {
72+
clearTimeout(interval);
73+
74+
if (finished) {
75+
resolve(true);
76+
}
77+
else {
78+
reject(false);
79+
}
80+
}
81+
}, 10);
82+
});
83+
84+
assert(fulfilledPromise.isPending());
85+
assert(!fulfilledPromise.isFulfilled());
86+
assert(!fulfilledPromise.isRejected());
87+
88+
try {
89+
fulfilledPromise.value();
90+
91+
assert(false);
92+
}
93+
catch (e) {
94+
assert(true);
95+
}
96+
97+
finished = false;
98+
99+
setTimeout(function () {
100+
try {
101+
fulfilledPromise.value();
102+
103+
assert(false);
104+
}
105+
catch (e) {
106+
assert(true);
107+
}
108+
}, 30);
109+
});
110+
111+
it('will throw an error if getting a reason of a non-rejected promise', function () {
112+
var finished = null;
113+
var fulfilledPromise = new Promise(function(resolve, reject) {
114+
var interval = setInterval(function() {
115+
if (finished !== null) {
116+
clearTimeout(interval);
117+
118+
if (finished) {
119+
resolve(true);
120+
}
121+
else {
122+
reject(false);
123+
}
124+
}
125+
}, 10);
126+
});
127+
128+
assert(fulfilledPromise.isPending());
129+
assert(!fulfilledPromise.isFulfilled());
130+
assert(!fulfilledPromise.isRejected());
131+
132+
try {
133+
fulfilledPromise.reason();
134+
135+
assert(false);
136+
}
137+
catch (e) {
138+
assert(true);
139+
}
140+
141+
finished = true;
142+
143+
setTimeout(function () {
144+
try {
145+
fulfilledPromise.reason();
146+
147+
assert(false);
148+
}
149+
catch (e) {
150+
assert(true);
151+
}
152+
}, 30);
153+
});
154+
});

0 commit comments

Comments
 (0)