Есть ли в XPages SSJS функция polyfill для функций тайм-аута и интервала JavaScript? - PullRequest
0 голосов
/ 03 декабря 2018

При работе с серверным JavaScript (XPJS) XPages мне не хватает функций синхронизации / планирования setTimeout, setInterval, clearTimeout и clearInterval.

Есть ли или кто-то может предоставить полизаполнение для этих основных функций в SSJS?

1 Ответ

0 голосов
/ 06 декабря 2018

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()
...