XPages SSJS中的JavaScript超时和间隔函数是否有polyfill?

XPages SSJS中的JavaScript超时和间隔函数是否有polyfill?,javascript,xpages,settimeout,setinterval,xpages-ssjs,Javascript,Xpages,Settimeout,Setinterval,Xpages Ssjs,使用XPages的服务器端JavaScript(SSJS)时,我错过了计时/调度功能setTimeout,setInterval,cleartimout和cleartime SSJS中是否存在或是否有人可以为这些基本函数提供polyfill?SSJS只是一个字符串,在调用方法时调用它。没有“计时”功能可用,因为SSJS引擎只是在请求期间“执行”的。当请求完成时,必须完成SSJS代码 在浏览器或运行时(如node.js)中使用这些函数时,您的代码可以“在后台”运行,因为如果请求完成,运行时仍在“运

使用XPages的服务器端JavaScript(SSJS)时,我错过了计时/调度功能
setTimeout
setInterval
cleartimout
cleartime


SSJS中是否存在或是否有人可以为这些基本函数提供polyfill?

SSJS只是一个字符串,在调用方法时调用它。没有“计时”功能可用,因为SSJS引擎只是在请求期间“执行”的。当请求完成时,必须完成SSJS代码

在浏览器或运行时(如node.js)中使用这些函数时,您的代码可以“在后台”运行,因为如果请求完成,运行时仍在“运行”

只需考虑以下几点:要停止setTimeout,必须使用clearInterval。这需要一个保存计时器引用的变量。如何在SSJS中存储此变量

编辑:

您可以更改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()

你需要它们做什么?@PerHenrikLausten:用于定期发送邮件通知、定期计算数据统计数据等…我会研究使用计划的XAgents(如本答案中所示)或计划的XOTS任务。感谢你花时间撰写此解释。我知道SSJS是如何工作的,但是给定的函数对我来说是必不可少的。多年来,我一直使用以下方法作为解决方法:(1)我在applicationScope中使用唯一键存储定时函数。(2) 我创建了一个可运行的任务,该任务调用一个XPage,该XPage按键执行定时函数。(3) 我使用java.util.concurrent.ScheduledExecutorService调度任务。这种方法可行,但显然会消耗大量资源。因此,我对正确的polyfill.PS提出了问题:我还尝试创建一个可运行的任务,该任务使用XPages的ExpressionEvaluator和ValueBindungs直接运行SSJS,但由于它在单独的线程中运行,因此我缺少那里的NotesContext(“NotesContext未初始化…”)。你知道这个问题的解决办法吗?使用此方法将大大减少我当前polyfill的资源消耗…请查看XPagesExecutorService:谢谢您的建议-我会查看一下。很抱歉再次打扰您。您知道如何使用Java中的NotesContext或NotesSession计算SSJS表达式吗?