code: @Contract(pure = true)
  	@NotNull
  	public static <T> Promise<T> timeout(@NotNull Promise<T> promise, long delay) {
  		if (promise.isComplete()) return promise;
  		if (delay <= 0) return Promise.ofException(TIMEOUT_EXCEPTION);
  		return promise.next(new NextPromise<T, T>() {
  			@Nullable ScheduledRunnable schedule = getCurrentEventloop()
  					.delay(delay,
  							() -> {
  								schedule = null;
  								tryCompleteExceptionally(TIMEOUT_EXCEPTION);
  							});
  
  			@Override
  			public void accept(T result, @Nullable Throwable e) {
  				if (schedule != null) {
  					schedule.cancel();
  					schedule = null;
  				}
  				if (e == null) {
  					tryComplete(result);
  				} else {
  					tryCompleteExceptionally(e);
  				}
  			}
  		});
  	}
docs: Waits until the delay passes and if the {@code Promise} is still
  not complete, tries to complete it with {@code TIMEOUT_EXCEPTION}.
  
  @param promise the Promise to be tracked
  @param delay   time of delay
  @return {@code Promise}