如何从 Android 向 Javascript 函数发送回调?

时间:2021-07-25 10:41:29

标签: javascript java android reactjs kotlin

我正在尝试从 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)

的实现

1 个答案:

答案 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
    }
相关问题