docs: function(value)
  				{
  					if(this.state !== STATE_PENDING)
  						return;
  
  					if(value === this)
  						return this.reject(new TypeError("Attempt to resolve promise with self"));
  
  					var me = this; // preserve this
  
  					if(value && (typeof value === "function" || typeof value === "object"))
  					{
  						try
  						{
  							var first = true; // first time through?
  							var then = value.then;
  							if(typeof then === "function")
  							{
  								// and call the value.then (which is now in "then") with value as the context and the resolve/reject functions per thenable spec
  								then.call(value,
  									function(ra) { if(first) { first=false; me.resolve(ra);}  },
  									function(rr) { if(first) { first=false; me.reject(rr); } });
  								return;
  							}
  						}
  						catch(e)
  						{
  							if(first)
  								this.reject(e);
  							return;
  						}
  					}
  
  					this.state = STATE_FULFILLED;
  					this.v = value;
  
  					if(me.c)
  						soon(function() {
  								for(var n=0, l=me.c.length;n<l;n++)
  									resolveClient(me.c[n],value);
  							});
  				}