当使用XPages的服务器端JavaScript(SSJS)时,我错过了计时/调度功能setTimeout
,setInterval
,clearTimeout
和clearInterval
。
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()