in util/base/src/main/java/jetbrains/jetpad/base/Asyncs.java [162:188]
static <SourceT, TargetT> Async<TargetT> select(Async<SourceT> async,
final Function<? super SourceT, Async<TargetT>> f, final ResolvableAsync<TargetT> resultAsync) {
async.onResult(new Consumer<SourceT>() {
@Override
public void accept(SourceT item) {
Async<TargetT> async1;
try {
async1 = f.apply(item);
} catch (Exception e) {
resultAsync.failure(e);
return;
}
if (async1 == null) {
resultAsync.success(null);
} else {
delegate(async1, resultAsync);
}
}
},
new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) {
resultAsync.failure(throwable);
}
});
return resultAsync;
}