2017-10-25 4 views
0

は、ここで私はに苦しんだ問題を再現するために、コードの最小限の抜粋です:GWT:どのようにPARAMとして渡されたネイティブのJS関数を実行する(したがってアクセスできないグローバル)

import java.util.function.Consumer; 

public class NaivePromise<T> { 

    public NaivePromise(Consumer<Consumer<T>> resolve) { 
    super(); 
    create(resolve); 
    } 

    public native NaivePromise<T> create(Consumer<Consumer<T>> handler) /*-{ 
    return new Promise(function (resolve) { 
     console.log("DBG NATIVE RESOLVE"); 
     [email protected]::accept(*)(resolve) 
    }); 
    }-*/; 


    public static void pong() { 
    new NaivePromise<String>(resolve -> { 
     resolve.accept("HERE WE'LL GET AN ERROR, SINCE RESOLVE IS ACTUALLY A NATIVE FUNCTION"); 
    }); 
    } 

} 

私の質問は次のようになり - どのように私はGWTコンシューマー(または他の機能的なインターフェイス)にラムダとして渡されたネイティブ関数を実行できますか?

答えて

3

あなたはresolveJavaScriptObjectではなくConsumer<String>を作り、それを呼び出すためにJSNIを使用する必要があるだろう:

private native void call(JavaScriptObject resolve, String arg) /*-{ 
    resolve(arg); 
}-*/; 

あなたが実際に本当に@JsFunctionインタフェースで、ここJsInteropを使用する必要がありますけど。おそらく実際にはPromiseの要素2のマッピングを使用するだけです。

関連する問題