 			reject e
 			return $tryErr
 
-	_getX: (hGroup, handler) ->
+	getX = (self, offset, handler) ->
 		try
-			handler @_value
+			handler self._value
 		catch e
-			hGroup[3] e
+			self[offset + 3] e
 			return $tryErr
 
 	###*
 	 * Decide how handlers works.
 	 * @private
 	 * @param  {Yaku} self
-	###
-	_resolveHanlers: (hGroup) ->
+	 * @param  {Integer} offset The offset of the handler group.
+	###
+	resolveHanlers = (self, offset) ->
 		# Trick: Reuse the value of state as the handler selector.
 		# The "i + state" shows the math nature of promise.
-		handler = hGroup[@_state]
+		handler = self[offset + self._state]
 
 		if typeof handler == 'function'
-			self = @
 			nextTick ->
-				x = self._getX hGroup, handler
+				x = getX self, offset, handler
 				return if x == $tryErr
 
 				# Prevent circular chain.
-				if x == hGroup[4] and x
-					return x._trigger $rejected,
-						new TypeError $circularErrorInfo
-
-				resolveValue x, hGroup[2], hGroup[3]
+				if x == self[offset + 4] and x
+					return x[offset + 1]? new TypeError $circularErrorInfo
+
+				resolveValue x, self[offset + 2], self[offset + 3]
 		else
-			hGroup[2 + @_state] @_value
-
-		return
-
-	_trigger: (state, value) ->
-		return if @_state != $pending
-
-		@_state = state
-		@_value = value
-
-		i = 0
-
-		while i < @_hCount
-			@_resolveHanlers @[i++]
+			self[offset + 2 + self._state] self._value
+
+		return
+
+	###*
+	 * It will produce a trigger function to user.
+	 * Such as the resolve and reject in this `new Yaku (resolve, reject) ->`.
+	 * @private
+	 * @param  {Yaku} self
+	 * @param  {Integer} state The value is one of `$pending`, `$resolved` or `$rejected`.
+	 * @return {Function} `(value) -> undefined` A resolve or reject function.
+	###
+	genTrigger = (self, state) -> (value) ->
+		return if self._state != $pending
+
+		self._state = state
+		self._value = value
+
+		offset = 0
+
+		while offset < self._hCount
+			resolveHanlers self, offset
+
+			offset += $groupNum
 
 		return
 

	 * then these values will be passed to 2 and 3.
	 * @private
	###

	$circularErrorInfo = 'circular promise resolution chain'


	 * We can call these functions, once our operation is completed.
	###
	constructor: (executor) ->
		executor genTrigger(@, $resolved), genTrigger(@, $rejected)

	###*
	 * Appends fulfillment and rejection handlers to the promise,
