-
Notifications
You must be signed in to change notification settings - Fork 2
/
index.js
63 lines (60 loc) · 1.45 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
(function () {
function promise() {
var resolved = false,
fulfilled = false,
val,
waiting = [];
function then(cb, eb, pb) {
var def = promise();
function done() {
var callback = fulfilled ? cb : eb;
if (callback) {
setTimeout(function () {
var value;
try {
value = callback(val);
} catch (ex) {
return def.reject(ex);
}
def.fulfill(value);
}, 0);
} else if (fulfilled) {
def.fulfill(val);
} else {
def.reject(val);
}
}
if (resolved) {
done();
} else {
waiting.push(done);
}
return def.promise;
}
function resolve(success, value) {
if (resolved) return;
if (success && typeof value === 'object' && typeof value.then === 'function') {
value.then(fulfill, reject);
return;
}
resolved = true;
fulfilled = success;
val = value;
for (var i = 0; i < waiting.length; i++) {
waiting[i]();
}
}
function fulfill(val) {
resolve(true, val);
}
function reject(err) {
resolve(false, err);
}
return {promise: {then: then}, fulfill: fulfill, reject: reject};
};
if (typeof module != 'undefined' && typeof module.exports != 'undefined') {
module.exports = promise;
} else {
window.promise = promise;
}
}());