3 //This file contains the ES6 extensions to the core Promises/A+ API
5 var Promise = require('./core.js');
7 module.exports = Promise;
11 var TRUE = valuePromise(true);
12 var FALSE = valuePromise(false);
13 var NULL = valuePromise(null);
14 var UNDEFINED = valuePromise(undefined);
15 var ZERO = valuePromise(0);
16 var EMPTYSTRING = valuePromise('');
18 function valuePromise(value) {
19 var p = new Promise(Promise._61);
24 Promise.resolve = function (value) {
25 if (value instanceof Promise) return value;
27 if (value === null) return NULL;
28 if (value === undefined) return UNDEFINED;
29 if (value === true) return TRUE;
30 if (value === false) return FALSE;
31 if (value === 0) return ZERO;
32 if (value === '') return EMPTYSTRING;
34 if (typeof value === 'object' || typeof value === 'function') {
36 var then = value.then;
37 if (typeof then === 'function') {
38 return new Promise(then.bind(value));
41 return new Promise(function (resolve, reject) {
46 return valuePromise(value);
49 Promise.all = function (arr) {
50 var args = Array.prototype.slice.call(arr);
52 return new Promise(function (resolve, reject) {
53 if (args.length === 0) return resolve([]);
54 var remaining = args.length;
55 function res(i, val) {
56 if (val && (typeof val === 'object' || typeof val === 'function')) {
57 if (val instanceof Promise && val.then === Promise.prototype.then) {
58 while (val._65 === 3) {
61 if (val._65 === 1) return res(i, val._55);
62 if (val._65 === 2) reject(val._55);
63 val.then(function (val) {
69 if (typeof then === 'function') {
70 var p = new Promise(then.bind(val));
71 p.then(function (val) {
79 if (--remaining === 0) {
83 for (var i = 0; i < args.length; i++) {
89 Promise.reject = function (value) {
90 return new Promise(function (resolve, reject) {
95 Promise.race = function (values) {
96 return new Promise(function (resolve, reject) {
97 values.forEach(function(value){
98 Promise.resolve(value).then(resolve, reject);
103 /* Prototype Methods */
105 Promise.prototype['catch'] = function (onRejected) {
106 return this.then(null, onRejected);