toolkit/devtools/deprecated-sync-thenables.js

Wed, 31 Dec 2014 13:27:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 13:27:57 +0100
branch
TOR_BUG_3246
changeset 6
8bccb770b82d
permissions
-rw-r--r--

Ignore runtime configuration files generated during quality assurance.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 /**
     6  * THIS MODULE IS DEPRECATED. IMPORT "Promise.jsm" INSTEAD.
     7  */
     9 "use strict";
    11 this.Promise = {};
    13 if (typeof(require) === "function") {
    14   module.exports = Promise;
    15 } else {
    16   this.EXPORTED_SYMBOLS = ["Promise"];
    17 }
    19 function fulfilled(value) {
    20   return { then: function then(fulfill) { fulfill(value); } };
    21 }
    23 function rejected(reason) {
    24   return { then: function then(fulfill, reject) { reject(reason); } };
    25 }
    27 function isPromise(value) {
    28   return value && typeof(value.then) === 'function';
    29 }
    31 function defer() {
    32   var observers = [];
    33   var result = null;
    34   var promise = {
    35     then: function then(onFulfill, onError) {
    36       var deferred = defer();
    38       function resolve(value) {
    39         try {
    40           deferred.resolve(onFulfill ? onFulfill(value) : value);
    41         } catch (error) {
    42           deferred.resolve(rejected(error));
    43         }
    44       }
    46       function reject(reason) {
    47         try {
    48           if (onError) deferred.resolve(onError(reason));
    49           else deferred.resolve(rejected(reason));
    50         } catch (error) {
    51           deferred.resolve(rejected(error));
    52         }
    53       }
    55       if (observers) {
    56         observers.push({ resolve: resolve, reject: reject });
    57       } else {
    58         result.then(resolve, reject);
    59       }
    61       return deferred.promise;
    62     }
    63   };
    65   var deferred = {
    66     promise: promise,
    67     resolve: function resolve(value) {
    68       if (!result) {
    69         result = isPromise(value) ? value : fulfilled(value);
    70         while (observers.length) {
    71           var observer = observers.shift();
    72           result.then(observer.resolve, observer.reject);
    73         }
    74         observers = null;
    75       }
    76     },
    77     reject: function reject(reason) {
    78       deferred.resolve(rejected(reason));
    79     }
    80   };
    82   return deferred;
    83 }
    84 Promise.defer = defer;
    86 function resolve(value) {
    87   var deferred = defer();
    88   deferred.resolve(value);
    89   return deferred.promise;
    90 }
    91 Promise.resolve = resolve;
    93 function reject(reason) {
    94   var deferred = defer();
    95   deferred.reject(reason);
    96   return deferred.promise;
    97 }
    98 Promise.reject = reject;
   100 var promised = (function() {
   101   var call = Function.call;
   102   var concat = Array.prototype.concat;
   103   function execute(args) { return call.apply(call, args) }
   104   function promisedConcat(promises, unknown) {
   105     return promises.then(function(values) {
   106       return resolve(unknown).then(function(value) {
   107         return values.concat([ value ]);
   108       });
   109     });
   110   }
   111   return function promised(f) {
   112     return function promised() {
   113       return concat.apply([ f, this ], arguments).
   114         reduce(promisedConcat, resolve([])).
   115         then(execute);
   116     };
   117   }
   118 })();
   119 Promise.all = promised(Array);

mercurial