in util/base/src/main/java/jetbrains/jetpad/base/Asyncs.java [55:97]
public static <ValueT> Async<ValueT> constant(final ValueT val) {
return new Async<ValueT>() {
@Override
public Registration onSuccess(Consumer<? super ValueT> successHandler) {
successHandler.accept(val);
return Registration.EMPTY;
}
@Override
public Registration onResult(Consumer<? super ValueT> successHandler, Consumer<Throwable> failureHandler) {
return onSuccess(successHandler);
}
@Override
public Registration onFailure(Consumer<Throwable> failureHandler) {
return Registration.EMPTY;
}
@Override
public <ResultT> Async<ResultT> map(Function<? super ValueT, ? extends ResultT> success) {
ResultT result;
try {
result = success.apply(val);
} catch (Throwable t) {
return Asyncs.failure(t);
}
//return cannot be moved to try block to avoid catching possible errors from Asyncs.constant call
return Asyncs.constant(result);
}
@Override
public <ResultT> Async<ResultT> flatMap(Function<? super ValueT, Async<ResultT>> success) {
Async<ResultT> result;
try {
result = success.apply(val);
} catch (Throwable t) {
return Asyncs.failure(t);
}
//return cannot be moved to try block to avoid catching possible errors from Asyncs.constant call
return result == null ? Asyncs.<ResultT>constant(null) : result;
}
};
}