code: public static <T> IPromise<IPromise<T>[]> all(IPromise<T>... futures) {
          Promise res = new Promise();
          awaitSettle(futures, res);
          return res;
      }
docs: similar to es6 Promise.all method, however non-IPromise objects are not allowed
  
  returns a future which is settled once all promises provided are settled