code: private static <T> void awaitSettle(final List<IPromise<T>> futures, final IPromise result) {
          PromiseLatch latch = new PromiseLatch(futures.size());
          latch.getPromise().then( () -> result.complete(futures, null) );
          futures.forEach( fut -> fut.then( () -> latch.countDown() ) );
      }
docs: changed to non recursive due to stackoverflows ..