class Async::Promise

def wait

@raises [Exception] The rejected or cancelled exception.
@returns [Object] The resolved value.

If already resolved, returns immediately. If rejected, raises the stored exception.
Wait for the promise to be resolved and return the value.
def wait
	@mutex.synchronize do
		# Increment waiting count:
		@waiting += 1
		
		begin
			# Wait for resolution if not already resolved:
			@condition.wait(@mutex) unless @resolved
			
			# Return value or raise exception based on resolution type:
			if @resolved == :completed
				return @value
			else
				# Both :failed and :cancelled store exceptions in @value
				raise @value
			end
		ensure
			# Decrement waiting count when done:
			@waiting -= 1
		end
	end
end