3

次の JS コードがあるとします。

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

    function hello(){
        return "Hello";
    }

Java では、以下を使用してこのコードを GraalVM コンテキスト オブジェクトにロードできます。

    context.eval("js", mappingTemplate);

以下を使用して評価できる 2 つのメンバーを指定します。

    Value bindings = context.getBindings("js");
    final Value executionResult1 = bindings.getMember("hello")
                        .execute();
    final Value executionResult2 = bindings.getMember("helloAsync")
                        .execute();

その結果、これはexecutionResult2Java 内で完了することができる promise になります。私の質問はexecutionResult2executionResult1. 現在、素朴で信頼性の低いアプローチは次のようになります。

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

JSから返された約束を認識するより信頼できる/エレガントな方法は何ですか?

4

2 に答える 2

2

これ を介してコンテンツを検査してみてくださいvalue.getMetaObject()

ドキュメントは次のように述べています。

この値に関連付けられているメタオブジェクトを返します。メタオブジェクトが使用できない場合は null を返します。メタオブジェクトはオブジェクトの説明を表し、その種類と機能を明らかにします。メタオブジェクトが定義する情報には、ベース オブジェクトの型、インターフェイス、クラス、メソッド、属性などが含まれます。

あなたの場合に役立つかもしれません。

于 2020-10-01T10:24:33.863 に答える