2017-10-25 10 views
0

가 여기에 내가 함께 사투를 벌인거야 문제를 재현하는 코드의 최소한의 조각입니다 :GWT : 기본 JS의 PARAM로 전달 기능 (세계적 따라서 액세스 할 수 없습니다)을 실행하는 방법

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 Consumer (또는 다른 기능적 인터페이스)에 lambda로 전달 된 네이티브 함수를 실행할 수 있습니까?

답변

3

당신은 오히려 Consumer<String>보다 resolveJavaScriptObject을하고 전화를 JSNI를 사용해야 할 것 :

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

당신이 실제로 정말 @JsFunction 인터페이스, 여기 JsInterop를 사용해야하지만, 아마도 실제로는 Elemental 2의 매핑은 Promise 일 것입니다.