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 | function defer() {
|
26 |
|
27 | var me = {resolve: undefined,
|
28 | reject: undefined,
|
29 | promise: {then: undefined}};
|
30 |
|
31 | me.promise.then = function(callback, errback) {
|
32 | var d = defer();
|
33 | me.resolve = function(value) {
|
34 | try { d.resolve((callback) ? callback(value) : value); }
|
35 | catch (e) { d.reject(e); }
|
36 | };
|
37 | me.reject = function(err) {
|
38 | try { d.reject((errback) ? errback(err) : err); }
|
39 | catch (e) { d.reject(e); }
|
40 | };
|
41 | me.promise.then = error;
|
42 | return d.promise;
|
43 | };
|
44 |
|
45 | me.resolve = function(value) {
|
46 | me.promise.then = function(callback, errback) {
|
47 | var d = defer();
|
48 | try { d.resolve((callback) ? callback(value) : value); }
|
49 | catch (e) { d.reject(e) }
|
50 | return d.promise;
|
51 | };
|
52 | me.resolve = me.reject = error;
|
53 | };
|
54 |
|
55 | me.reject = function(value) {
|
56 | me.promise.then = function(callback, errback) {
|
57 | var d = defer();
|
58 | try { d.reject((errback) ? errback(value) : value) }
|
59 | catch (e) { d.reject(e) }
|
60 | return d.promise;
|
61 | };
|
62 | me.resolve = me.reject = error;
|
63 | };
|
64 |
|
65 | function error() {
|
66 | throw new Error("Then, resolve or reject called more than once");
|
67 | };
|
68 |
|
69 | return me;
|
70 | }
|
71 |
|
72 | module.exports.defer = defer;
|