我试图使用Rhino的延续,但我找到了关于如何做的混合指示。我想在JS中创建和使用continuation。
https://developer.mozilla.org/en-US/docs/New_in_Rhino_1.7R2#Java_API.C2.A0for_Continuations
以处理异常的形式展示了如何在Java中使用它们(我认为这只是错误的查看方式)。
http://wiki.apache.org/cocoon/RhinoWithContinuations
显示了一种现已弃用的方式 - 它不再允许显式创建延续。
有人可以澄清一下吗?我现在可以使用1.7R2发行说明中的4种方法通过Java端操作来创建与Rhino的JS延续吗?
答案 0 :(得分:2)
已经有一段时间了,但我把它弄清楚了,所以写得更好。
Rhino中的连续处理只是Java端 - 您通过运行具有Continuations支持的函数进入JS,并在抛出ContinuationPending异常或调用抛出它的Java代码时从Javascript代码返回Java。您将返回Java代码中的catch。
这段代码开始执行一个带有Continuations支持的函数 - 进入Javascript。
try {
openGlobalContext();
_globalContext.callFunctionWithContinuations(_func, _scope,
new Object[0]);
} catch (ContinuationPending pending) {
_cont = pending;
} finally {
closeGlobalContext();
}
这段 Java 代码,当从 解释 Javascript 时调用<,>“Javascript代码延伸至延续异常的地方被扔了。也就是说,SomeMoreCode()
将会运行。
public void createContinuation(){
try {
openGlobalContext();
ContinuationPending pending =
_globalContext.captureContinuation();
throw pending;
} finally {
closeGlobalContext();
}
SomeMoreCode();
}