Ver Fonte

fix bug with promise

Adam Shaw há 9 anos atrás
pai
commit
3d14e384d2
1 ficheiros alterados com 4 adições e 16 exclusões
  1. 4 16
      src/common/Promise.js

+ 4 - 16
src/common/Promise.js

@@ -27,12 +27,13 @@ function Promise(executor) {
 			
 			if (state === 'resolved') {
 				if (typeof onFulfilled === 'function') {
-					return coercePromiseReturn(onFulfilled(promise._value), promise);
+					return Promise.resolve(onFulfilled(promise._value));
 				}
 			}
 			else if (state === 'rejected') {
 				if (typeof onRejected === 'function') {
-					return coercePromiseReturn(onRejected(), promise);
+					onRejected();
+					return promise; // already rejected
 				}
 			}
 
@@ -66,7 +67,7 @@ Promise.resolve = function(value) {
 
 			promise.then = function(onFulfilled, onRejected) {
 				if (typeof onFulfilled === 'function') {
-					return coercePromiseReturn(onFulfilled(value), promise);
+					return Promise.resolve(onFulfilled(value));
 				}
 				return origThen.call(promise, onFulfilled, onRejected);
 			};
@@ -111,16 +112,3 @@ Promise.all = function(inputs) {
 		});
 	}
 };
-
-
-function coercePromiseReturn(returnValue, origPromise) {
-	if (returnValue && typeof returnValue.resolve === 'function') {
-		return returnValue.promise();
-	}
-	else if (returnValue && typeof returnValue.then === 'function') {
-		return returnValue;
-	}
-	else {
-		return origPromise;
-	}
-}