Skip to content

Commit 4ea34ae

Browse files
committed
Implement expirable Promise
1 parent 93f6f62 commit 4ea34ae

1 file changed

Lines changed: 40 additions & 0 deletions

File tree

JavaScript/b-expirable.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
'use strict';
2+
3+
const PROMISE_TIMEOUT = 1000;
4+
5+
class Expirable extends Promise {
6+
constructor(executor) {
7+
super((resolve, reject) => {
8+
executor(val => {
9+
if (this.expired) {
10+
reject(new Error('Expired'));
11+
return;
12+
}
13+
clearTimeout(this.timer);
14+
resolve(val);
15+
}, reject);
16+
});
17+
this.expired = false;
18+
this.timer = setTimeout(() => {
19+
this.expired = true;
20+
}, PROMISE_TIMEOUT);
21+
}
22+
}
23+
24+
// Usage
25+
26+
new Expirable(resolve => {
27+
setTimeout(resolve, 100);
28+
}).then(data => {
29+
console.dir({ data });
30+
}).catch(error => {
31+
console.dir({ error });
32+
});
33+
34+
new Expirable(resolve => {
35+
setTimeout(resolve, 2000);
36+
}).then(data => {
37+
console.dir({ data });
38+
}).catch(error => {
39+
console.dir({ error });
40+
});

0 commit comments

Comments
 (0)