Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
81160 views
1
"use strict";
2
module.exports = function(
3
Promise, INTERNAL, tryConvertToPromise, apiRejection) {
4
var isArray = require("./util.js").isArray;
5
6
var raceLater = function (promise) {
7
return promise.then(function(array) {
8
return race(array, promise);
9
});
10
};
11
12
function race(promises, parent) {
13
var maybePromise = tryConvertToPromise(promises);
14
15
if (maybePromise instanceof Promise) {
16
return raceLater(maybePromise);
17
} else if (!isArray(promises)) {
18
return apiRejection("expecting an array, a promise or a thenable\u000a\u000a See http://goo.gl/s8MMhc\u000a");
19
}
20
21
var ret = new Promise(INTERNAL);
22
if (parent !== undefined) {
23
ret._propagateFrom(parent, 4 | 1);
24
}
25
var fulfill = ret._fulfill;
26
var reject = ret._reject;
27
for (var i = 0, len = promises.length; i < len; ++i) {
28
var val = promises[i];
29
30
if (val === undefined && !(i in promises)) {
31
continue;
32
}
33
34
Promise.cast(val)._then(fulfill, reject, undefined, ret, null);
35
}
36
return ret;
37
}
38
39
Promise.race = function (promises) {
40
return race(promises, undefined);
41
};
42
43
Promise.prototype.race = function () {
44
return race(this, undefined);
45
};
46
47
};
48
49