Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的GraalVM JavaScript-如何识别异步方法_Javascript_Java_Promise_Graalvm_Polyglot - Fatal编程技术网

Java中的GraalVM JavaScript-如何识别异步方法

Java中的GraalVM JavaScript-如何识别异步方法,javascript,java,promise,graalvm,polyglot,Javascript,Java,Promise,Graalvm,Polyglot,假设我们有以下JS代码: async function helloAsync(){ return "Hello"; } function hello(){ return "Hello"; } 在Java中,可以使用以下方法将此代码加载到GraalVM上下文对象中: context.eval("js", mappingTemplate); 给我们两个成员,我们可

假设我们有以下JS代码:

    async function helloAsync(){
        return "Hello";
    }

    function hello(){
        return "Hello";
    }
在Java中,可以使用以下方法将此代码加载到GraalVM上下文对象中:

    context.eval("js", mappingTemplate);
给我们两个成员,我们可以使用:

    Value bindings = context.getBindings("js");
    final Value executionResult1 = bindings.getMember("hello")
                        .execute();
    final Value executionResult2 = bindings.getMember("helloAsync")
                        .execute();
因此,
executionResult2
将是一个可以在Java中完成的承诺。我的问题是如何才能可靠地判断
executionResult2
实际上是一个承诺,而不仅仅是像
executionResult1
这样的字符串。目前,一种幼稚且不可靠的方法可能是:

if (executionResult.toString().startsWith("Promise") &&
                    executionResult.hasMember("then") && executionResult.hasMember("catch"))

识别JS返回的承诺的更可靠/更优雅的方法是什么?

您可以尝试通过
value.getMetaObject()
检查内容吗

医生说:

返回与此值关联的元对象,如果 没有可用的元对象。元对象表示对对象的描述 这个物体显示了它的种类和特征。一些信息 元对象可能定义包括基对象的类型、接口、, 类、方法、属性等


可能对您的案例有用。

是的,
value.getMetaObject()
是一种方法:它返回与
value
实例相关联的JS构造函数,在您的案例中应该是
Promise

这听起来确实是一个更好的主意。比如检查
value.getMetaObject().getMetaSimpleName()是否等于(“承诺”)
。如果我找不到更好的解决方案,我会把这个标记为答案。谢谢