我正在尝试从 JS 函数“refreshPagesWithIds”调用 Android 原生函数“refreshPages”,该函数将字符串数组传递给本机。
id: ["1","2"];
refreshPagesWithIds(id) {
return Android.refreshPages(id);
}
Android 原生函数“refreshPages”内部调用了一个方法“someFunction”,该方法以 id 数组为参数,刷新页面后返回一个 Promise。
@JavascriptInterface
public void refreshPages(String[] ids) {
StorageModule.someFunction(ids, null);
}
someFunction 看起来像:
@JvmStatic
fun someFunction(pageIds: ReadableArray, promise: Promise? = null) {
val storagePromise = StoragePromise(promise, storageModules.size)
storageModules.forEach { module -> module.refreshPagesWithIds(pageIds, storagePromise) }
}
当 refreshPages 函数(原生)的 Promise 被设置为 Javascript 时,我如何返回一个值? 我无法理解 public void refreshPages(String[] ids)
的实现答案 0 :(得分:1)
java promise 与javascript promise 不同,它们之间唯一相关的是名称。您不能将承诺从 java 返回到 javascript,即使语法允许您将发送一个与 java 中的对象无关的序列化克隆对象 - java 中的对象可能已完成,但您不会在 javascript 中知道这一点.
你可以在javascript中做这样的事情
arePagesRefereshed: true
id: ["1","2"];
refreshPagesWithIds(id) {
// this seems to be sitting in an object, so i am just assuming that this refers to the object, but you get the point
this.arePagesRefereshed = false
return Android.refreshPages(id);
},
markPagesAsRefereshed: () => {
this.arePagesRefereshed = true
}
然后在Java中
@JvmStatic
fun someFunction(pageIds: ReadableArray, promise: Promise? = null) {
val storagePromise = StoragePromise(promise, storageModules.size)
storageModules.forEach { module -> module.refreshPagesWithIds(pageIds, storagePromise) }
// after all promises are completed call markPagesAsRefereshed in javascript
}