public RelayOk evaluateAsync(String expression, ValueNameBuilder valueNameBuidler,
Map<String, ? extends SerializableValue> additionalContext,
WipValueLoader destinationValueLoader, EvaluateCommandHandler<?> evaluateCommandHandler,
final JsEvaluateContext.EvaluateCallback callback, SyncCallback syncCallback) {
RelaySyncCallback relaySyncCallback = new RelaySyncCallback(syncCallback);
final EvaluateSession evaluateSession = new EvaluateSession(expression, valueNameBuidler,
additionalContext, destinationValueLoader, evaluateCommandHandler);
final RelaySyncCallback.Guard guard = relaySyncCallback.newGuard();
GenericCallback<Void> postEnsureCallback = new GenericCallback<Void>() {
@Override
public void success(Void value) {
RelayOk relayOk = evaluateSession.run(callback, guard.getRelay());