我正在尝试对Rhino使用continuations,但我发现关于如何做到这一点的说明很复杂。我想在JS中创建和使用continuations。
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 continuations?
发布于 2015-10-20 19:16:48
已经有一段时间了,但我想出来了,所以最好把它写下来。
Rhino中的延续处理仅限于Java端-通过运行支持延续的函数进入JS,并在抛出ContinuationPending异常或调用抛出它的Java代码时从Javascript代码返回到Java语言。返回到Java代码中的catch。
这段代码开始执行一个支持延续的函数-进入Javascript。
try {
openGlobalContext();
_globalContext.callFunctionWithContinuations(_func, _scope,
new Object[0]);
} catch (ContinuationPending pending) {
_cont = pending;
} finally {
closeGlobalContext();
}这段 Javascript代码,当从解释的Javascript调用时,会“离开”Javascript代码到抛出延续异常的地方。也就是说,SomeMoreCode()将运行。
public void createContinuation(){
try {
openGlobalContext();
ContinuationPending pending =
_globalContext.captureContinuation();
throw pending;
} finally {
closeGlobalContext();
}
SomeMoreCode();
}https://stackoverflow.com/questions/29205126
复制相似问题