code: public static <T> Promise<List<T>> nSuccessesOrLess(int n, Iterator<Promise<T>> promises) {
  		return reduceEx(promises, a -> n - a.size(),
  				new ArrayList<T>(),
  				(a, v) -> {
  					if (v.isSuccess()) {
  						a.add(v.get());
  						if (a.size() == n) {
  							return Try.of(a);
  						}
  					}
  					return null;
  				},
  				Try::of,
  				Cancellable::tryCancel);
  	}
docs: Returns a {@code List} of successfully completed {@code Promise}s.
  Length of returned {@code List} can't be greater than {@code n}.