Skip to content

Commit e6d7b37

Browse files
author
chuckd
committed
Merge branch 'master' into work2
2 parents 0e6a5c1 + 8e8cc31 commit e6d7b37

File tree

1 file changed

+62
-53
lines changed

1 file changed

+62
-53
lines changed

amd/dojoES6Promise.js

+62-53
Original file line numberDiff line numberDiff line change
@@ -15,62 +15,71 @@
1515
*/
1616

1717
/*
18-
* A thin wrapper that implements ES6 promises using Dojo Deferred. Much smaller than a polyfill if the
19-
* Dojo modules are already being used and support for ES6 Promises needs to be provided for non-Dojo code
20-
* (e.g. Webpack 2.x bootstrap code)
18+
* A thin wrapper that implements an ES6 Promise polyfill using Dojo promises.
19+
* Much smaller than other Promise polyfills if the Dojo modules are already
20+
* being used.
2121
*/
2222
define([
23-
"dojo/Deferred",
24-
"dojo/promise/all",
25-
"dojo/promise/first",
26-
"dojo/_base/declare"
27-
], function(Deferred, all, first, declare) {
28-
"use strict";
23+
"dojo/Deferred",
24+
"dojo/promise/all",
25+
"dojo/promise/first",
26+
"dojo/_base/lang",
27+
"dojo/_base/array"
28+
], function(
29+
Deferred,
30+
all,
31+
first,
32+
lang,
33+
array
34+
) {
35+
"use strict";
2936

30-
var Promise, freezeObject = Object.freeze || function(){};
37+
var Promise, freezeObject = Object.freeze || function(){};
3138

32-
function wrap(dojoPromise) {
33-
var result = new Promise();
34-
result.promise = dojoPromise;
35-
freezeObject(result);
36-
return result;
37-
}
39+
function wrap(dojoPromise) {
40+
var result = new Promise();
41+
result.promise = dojoPromise;
42+
freezeObject(result);
43+
return result;
44+
}
3845

39-
Promise = declare([], {
40-
constructor: function(executor) {
41-
if (executor) {
42-
// Create a new dojo/Deferred
43-
var dfd = new Deferred();
44-
this.promise = dfd.promise;
45-
try {
46-
executor(dfd.resolve, dfd.reject);
47-
} catch (err) {
48-
dfd.reject(err);
49-
}
50-
freezeObject(this);
51-
}
52-
},
53-
catch: function(onRejected) {
54-
return wrap(this.promise.otherwise(onRejected));
55-
},
56-
then: function(onFullfilled, onRejected) {
57-
return wrap(this.promise.then(onFullfilled, onRejected));
58-
},
59-
});
60-
Promise.all = function(iterable) {
61-
return wrap(all(iterable));
62-
};
63-
Promise.race = function(iterable) {
64-
return wrap(first(iterable));
65-
};
66-
Promise.reject = function(reason) {
67-
return wrap((new Deferred()).reject(reason));
68-
};
69-
Promise.resolve = function(value) {
70-
return wrap((new Deferred()).resolve(value));
71-
};
72-
if (!window.Promise) {
73-
window.Promise = Promise;
74-
};
75-
return Promise;
46+
Promise = lang.extend(function PromiseWrapper(executor) {
47+
if (executor) {
48+
// Create a new dojo/Deferred
49+
var dfd = new Deferred();
50+
this.promise = dfd.promise;
51+
try {
52+
executor(
53+
function(value) { dfd.resolve(value, false); },
54+
function (reason) { dfd.reject(reason, false); }
55+
);
56+
} catch (err) {
57+
dfd.reject(err);
58+
}
59+
freezeObject(this);
60+
}
61+
}, {
62+
'catch': function(onRejected) {
63+
return wrap(this.promise.otherwise(onRejected));
64+
},
65+
then: function(onFullfilled, onRejected) {
66+
return wrap(this.promise.then(onFullfilled, onRejected));
67+
}
68+
});
69+
Promise.all = function(iterable) {
70+
return wrap(all(array.map(iterable, function(wrapped) {return wrapped.promise;})));
71+
};
72+
Promise.race = function(iterable) {
73+
return wrap(first(array.map(iterable, function(wrapped) {return wrapped.promise;})));
74+
};
75+
Promise.reject = function(reason) {
76+
return wrap((new Deferred()).reject(reason));
77+
};
78+
Promise.resolve = function(value) {
79+
return wrap((new Deferred()).resolve(value));
80+
};
81+
if (!window.Promise) {
82+
window.Promise = Promise;
83+
};
84+
return Promise;
7685
});

0 commit comments

Comments
 (0)