/** * calls given function round robin. typical use: * * hoarde.ordered( actor -> actor.decode(byte[]) ).onResult( decodedObj -> businesslogic(decodedObj) ); * * after * @param toCall * @return */ public IPromise ordered(Function<T, IPromise> toCall) { final IPromise result = toCall.apply((T) actors[index]); index++; if (index==actors.length) index = 0; if ( prev == null ) { prev = new Promise(); result.then(prev); return prev; } else { Promise p = new Promise(); prev.getNext().finallyDo((res, err) -> result.then((res1, err1) -> p.complete(res1, err1))); prev = p; return p; } }
/** * calls given function round robin. typical use: * * hoarde.ordered( actor -> actor.decode(byte[]) ).onResult( decodedObj -> businesslogic(decodedObj) ); * * after * @param toCall * @return */ public IPromise ordered(Function<T, IPromise> toCall) { final IPromise result = toCall.apply((T) actors[index]); index++; if (index==actors.length) index = 0; if ( prev == null ) { prev = new Promise(); result.then(prev); return prev; } else { Promise p = new Promise(); prev.getNext().finallyDo((res, err) -> result.then((res1, err1) -> p.complete(res1, err1))); prev = p; return p; } }