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

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

10-04 14:12