Rob*_*ier 3 javascript gwt gwt-jsinterop
我在@JsFunction 部分的文档https://docs.google.com/document/d/10fmlEYIHcyead_4R1S5wKGs1t2I7Fnp_PaNaa7XTEk0/edit#中尝试了这些示例,但是它仅提供了从javascript调用Java函数的想法。
我的GWT应用程序中包含一个javascript文件,其中包含以下代码:
var client = new Circuit.Client({
client_id: '78cafde2f6854ad5ad80a67c532687bc',
scope: 'READ_USER_PROFILE,READ_CONVERSATIONS',
domain: 'circuitsandbox.net'
});
function startLogon() {
client.logon()
.then(user => console.log('Logged on as ' + user.displayName))
.then(client.addEventListener('itemAdded', item => console.log('itemAdded event received:', item)))
.then(client.getConversations)
.then(conversations => {
console.log('Retrieved ' + conversations.length + ' conversations');
return client.addTextItem(conversations[0].convId, 'Hello World');
})
.then(item => console.log('Msg sent on ' + (new Date(item.creationTime)).toString()))
.catch(console.error);
}
Run Code Online (Sandbox Code Playgroud)
现在,我想使用jsInterop批注从我的应用中调用函数“ startLogon()”(使用包装器)。我尝试了以下两个示例,但均未成功:
使用GWT JsInterop实现Javascript函数回调
我不得不说,我的JavaScript知识很不好。
有人可以给我一个代码示例吗?提前谢谢了!
将此静态方法添加到任何类。
@JsMethod(namespace = GLOBAL)
public static native void startLogon();
Run Code Online (Sandbox Code Playgroud)
这将起作用,尽管您不能对返回的承诺做任何事情。如果要使用返回的诺言,建议添加elemental2并Promise startLogon()改为使用。
例如。这样,并更改js代码以返回promise:
@Override
public boolean error(Request request, Throwable throwable) {
Promise<String> promise = startLogon();
promise.then(s -> {
logger.info("Refreshed token: " + s);
return null;
}).catch_(error -> {
logger.severe("Refresh Error: " + error.toString());
return null;
});
return false;
}
@JsMethod(namespace = GLOBAL)
public static native Promise<String> startLogon();
Run Code Online (Sandbox Code Playgroud)