@Override public void fail(Promise<?> resolved) throws Exception { failedPromises.add(resolved); if (failedPromises.size() + resolvedValues.size() == promises.size()) { result.fail(new FailedPromisesException(failedPromises)); } } });
@Override public Promise<T> call(Promise<S> resolved) throws Exception { // "S is subtype of the value type of the List" @SuppressWarnings("unchecked") T value = (T) resolved.getValue(); resolvedValues.add(value); if (resolvedValues.size() == promises.size()) { result.resolve(resolvedValues); } else if (failedPromises.size() + resolvedValues.size() == promises.size()) { result.fail(new FailedPromisesException(failedPromises)); } return null; } }, new Failure() {
@Override public void run() { if (promiseCount.decrementAndGet() != 0) { return; } List<T> value = new ArrayList<>(promises.size()); List<Promise< ? >> failed = new ArrayList<>(promises.size()); Throwable cause = null; for (Promise<S> p : promises) { Result<S> result = PromiseImpl.collect(p); if (result.fail != null) { failed.add(p); if (cause == null) { cause = result.fail; } } else { value.add(result.value); } } if (failed.isEmpty()) { chained.tryResolve(value, null); } else { chained.tryResolve(null, new FailedPromisesException(failed, cause)); } } }
@Override public void run() { if (promiseCount.decrementAndGet() != 0) { return; } List<T> value = new ArrayList<>(promises.size()); List<Promise< ? >> failed = new ArrayList<>(promises.size()); Throwable cause = null; for (Promise<S> p : promises) { Result<S> result = PromiseImpl.collect(p); if (result.fail != null) { failed.add(p); if (cause == null) { cause = result.fail; } } else { value.add(result.value); } } if (failed.isEmpty()) { chained.tryResolve(value, null); } else { chained.tryResolve(null, new FailedPromisesException(failed, cause)); } } }
@Override public void run() { if (promiseCount.decrementAndGet() != 0) { return; } List<T> value = new ArrayList<>(promises.size()); List<Promise< ? >> failed = new ArrayList<>(promises.size()); Throwable cause = null; for (Promise<S> p : promises) { Result<S> result = PromiseImpl.collect(p); if (result.fail != null) { failed.add(p); if (cause == null) { cause = result.fail; } } else { value.add(result.value); } } if (failed.isEmpty()) { chained.tryResolve(value, null); } else { chained.tryResolve(null, new FailedPromisesException(failed, cause)); } } }
@Override public void run() { if (promiseCount.decrementAndGet() != 0) { return; } List<T> value = new ArrayList<>(promises.size()); List<Promise< ? >> failed = new ArrayList<>(promises.size()); Throwable cause = null; for (Promise<S> p : promises) { Result<S> result = PromiseImpl.collect(p); if (result.fail != null) { failed.add(p); if (cause == null) { cause = result.fail; } } else { value.add(result.value); } } if (failed.isEmpty()) { chained.tryResolve(value, null); } else { chained.tryResolve(null, new FailedPromisesException(failed, cause)); } } }
@Override public void run() { if (promiseCount.decrementAndGet() != 0) { return; } List<T> value = new ArrayList<>(promises.size()); List<Promise< ? >> failed = new ArrayList<>(promises.size()); Throwable cause = null; for (Promise<S> p : promises) { Result<S> result = PromiseImpl.collect(p); if (result.fail != null) { failed.add(p); if (cause == null) { cause = result.fail; } } else { value.add(result.value); } } if (failed.isEmpty()) { chained.tryResolve(value, null); } else { chained.tryResolve(null, new FailedPromisesException(failed, cause)); } } }
@Override public void run() { if (promiseCount.decrementAndGet() != 0) { return; } List<T> value = new ArrayList<>(promises.size()); List<Promise< ? >> failed = new ArrayList<>(promises.size()); Throwable cause = null; for (Promise<S> p : promises) { Result<S> result = PromiseImpl.collect(p); if (result.fail != null) { failed.add(p); if (cause == null) { cause = result.fail; } } else { value.add(result.value); } } if (failed.isEmpty()) { chained.tryResolve(value, null); } else { chained.tryResolve(null, new FailedPromisesException(failed, cause)); } } }
@Override public void run() { if (promiseCount.decrementAndGet() != 0) { return; } List<T> value = new ArrayList<>(promises.size()); List<Promise< ? >> failed = new ArrayList<>(promises.size()); Throwable cause = null; for (Promise<S> p : promises) { Result<S> result = PromiseImpl.collect(p); if (result.fail != null) { failed.add(p); if (cause == null) { cause = result.fail; } } else { value.add(result.value); } } if (failed.isEmpty()) { chained.tryResolve(value, null); } else { chained.tryResolve(null, new FailedPromisesException(failed, cause)); } } }
chained.resolve(result, null); } else { chained.resolve(null, new FailedPromisesException(failed, cause));