Version 1
[yaffs-website] / node_modules / bluebird / js / release / race.js
1 "use strict";
2 module.exports = function(
3     Promise, INTERNAL, tryConvertToPromise, apiRejection) {
4 var util = require("./util");
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 {
18         promises = util.asArray(promises);
19         if (promises === null)
20             return apiRejection("expecting an array or an iterable object but got " + util.classString(promises));
21     }
22
23     var ret = new Promise(INTERNAL);
24     if (parent !== undefined) {
25         ret._propagateFrom(parent, 3);
26     }
27     var fulfill = ret._fulfill;
28     var reject = ret._reject;
29     for (var i = 0, len = promises.length; i < len; ++i) {
30         var val = promises[i];
31
32         if (val === undefined && !(i in promises)) {
33             continue;
34         }
35
36         Promise.cast(val)._then(fulfill, reject, undefined, ret, null);
37     }
38     return ret;
39 }
40
41 Promise.race = function (promises) {
42     return race(promises, undefined);
43 };
44
45 Promise.prototype.race = function () {
46     return race(this, undefined);
47 };
48
49 };