如何在Rhino中调用continuation?

时间:2015-03-23 07:32:56

标签: javascript rhino continuations

我试图使用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延续吗?

1 个答案:

答案 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();
}