 	 * @param {Yaku} p1
 	 * @param {Yaku} p2
 	###
-	scheduleHandler = genScheduler 999, (p1, p2) ->
-		handler = if p1._state then p2._onFulfilled else p2._onRejected
-
-		# 2.2.7.3
-		# 2.2.7.4
-		if handler == $nil
-			settlePromise p2, p1._state, p1._value
-			return
-
-		# 2.2.7.1
-		x = genTryCatcher(callHanler) handler, p1._value
-		if x == $tryErr
-			# 2.2.7.2
-			settlePromise p2, $rejected, x.e
-			return
-
-		settleWithX p2, x
+	scheduleHandler = genScheduler 999, (p1) ->
+		i = 0
+		len = p1._pCount
+
+		while i < len
+			p2 = p1[i++]
+
+			continue if p2._state != $pending
+
+			# 2.2.2
+			# 2.2.3
+			handler = if p1._state then p2._onFulfilled else p2._onRejected
+
+			# 2.2.7.3
+			# 2.2.7.4
+			if handler == $nil
+				settlePromise p2, p1._state, p1._value
+				continue
+
+			# 2.2.7.1
+			x = genTryCatcher(callHanler) handler, p1._value
+			if x == $tryErr
+				# 2.2.7.2
+				settlePromise p2, $rejected, x.e
+				continue
+
+			settleWithX p2, x
 
 		return
 

		if not isLongStackTrace
			p._pre = $nil

		i = 0
		len = p._pCount

		# 2.2.2
		# 2.2.3
		while i < len
			# 2.2.4
			scheduleHandler p, p[i++]

		p


		Yaku.nextTick = try
			root.process.nextTick
		catch
			setTimeout.bind root

		(v) ->
			fnQueue[fnQueueLen++] = v

			Yaku.nextTick flush if fnQueueLen == 1

			return

