SSJS - это просто строка, которая вызывается при вызове метода.Функциональные возможности «синхронизации» недоступны, поскольку механизм SSJS просто «выполняется» во время запроса.Когда запрос завершен, код SSJS должен быть завершен.
При использовании этих функций в браузере или во время выполнения, например, node.js, ваш код может выполняться «в фоновом режиме», поскольку среда выполнениявсе еще «работает», если запрос завершен.
Просто подумайте о следующем: чтобы остановить setTimeout , вы должны использовать clearInterval .Для этого требуется переменная, содержащая ссылку на таймер.Как вы храните эту переменную в SSJS?
EDIT:
Вы можете изменить класс DemoExecutor , чтобы получить дескриптор интерпретатора SSJS.
class DemoCallable implements Callable {
private final NSFComponentModule module;
private transient JavaScriptInterpreter jsInterpreter;
private transient FBSGlobalObject globalObject;
public DemoCallable(NSFComponentModule module, JavaScriptInterpreter jsInterpreter, FBSGlobalObject globalObject ) {
this.module = module;
this.jsInterpreter = jsInterpreter;
this.globalObject = globalObject;
}
...
}
Это дает вам доступ к Интерпретатору и глобальному объекту JS.
Вы можете получить объекты из корневого представления:
facesContext.getViewRoot().getGlobalObject()
facesContext.getViewRoot().getJSInterpreter()