code: @NotNull
  	public static <T> Promise<T> any(@NotNull Iterator<? extends Promise<? extends T>> promises, @NotNull Consumer<T> cleanup) {
  		if (!promises.hasNext()) return any();
  		@NotNull PromiseAny<T> resultPromise = new PromiseAny<>();
  		while (promises.hasNext()) {
  			Promise<? extends T> promise = promises.next();
  			if (promise.isResult()) return Promise.of(promise.materialize().getResult());
  			if (promise.isException()) continue;
  			resultPromise.errors++;
  			promise.whenComplete((result, e) -> {
  				if (e == null) {
  					if (resultPromise.isComplete()) {
  						cleanup.accept(result);
  					} else {
  						resultPromise.complete(result);
  					}
  				} else {
  					if (--resultPromise.errors == 0) {
  						resultPromise.completeExceptionally(e);
  					}
  				}
  			});
  		}
  		return resultPromise.errors != 0 ? resultPromise : any();
  	}
docs: Returns one of the first completed {@code Promise}s. Since it's
  async, we can't really get the FIRST completed {@code Promise}.
  
  @return one of the first completed {@code Promise}s