twitst4tz

twitter statistics web application
Log | Files | Refs | README | LICENSE

bind.js (1970B)


      1 "use strict";
      2 module.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) {
      3 var calledBind = false;
      4 var rejectThis = function(_, e) {
      5     this._reject(e);
      6 };
      7 
      8 var targetRejected = function(e, context) {
      9     context.promiseRejectionQueued = true;
     10     context.bindingPromise._then(rejectThis, rejectThis, null, this, e);
     11 };
     12 
     13 var bindingResolved = function(thisArg, context) {
     14     if (((this._bitField & 50397184) === 0)) {
     15         this._resolveCallback(context.target);
     16     }
     17 };
     18 
     19 var bindingRejected = function(e, context) {
     20     if (!context.promiseRejectionQueued) this._reject(e);
     21 };
     22 
     23 Promise.prototype.bind = function (thisArg) {
     24     if (!calledBind) {
     25         calledBind = true;
     26         Promise.prototype._propagateFrom = debug.propagateFromFunction();
     27         Promise.prototype._boundValue = debug.boundValueFunction();
     28     }
     29     var maybePromise = tryConvertToPromise(thisArg);
     30     var ret = new Promise(INTERNAL);
     31     ret._propagateFrom(this, 1);
     32     var target = this._target();
     33     ret._setBoundTo(maybePromise);
     34     if (maybePromise instanceof Promise) {
     35         var context = {
     36             promiseRejectionQueued: false,
     37             promise: ret,
     38             target: target,
     39             bindingPromise: maybePromise
     40         };
     41         target._then(INTERNAL, targetRejected, undefined, ret, context);
     42         maybePromise._then(
     43             bindingResolved, bindingRejected, undefined, ret, context);
     44         ret._setOnCancel(maybePromise);
     45     } else {
     46         ret._resolveCallback(target);
     47     }
     48     return ret;
     49 };
     50 
     51 Promise.prototype._setBoundTo = function (obj) {
     52     if (obj !== undefined) {
     53         this._bitField = this._bitField | 2097152;
     54         this._boundTo = obj;
     55     } else {
     56         this._bitField = this._bitField & (~2097152);
     57     }
     58 };
     59 
     60 Promise.prototype._isBound = function () {
     61     return (this._bitField & 2097152) === 2097152;
     62 };
     63 
     64 Promise.bind = function (thisArg, value) {
     65     return Promise.resolve(value).bind(thisArg);
     66 };
     67 };