# Promise(支持native穿透)

Promise 用于表示一个异步操作的最终完成(或失败)及其结果值。

JsView 对 Promise 提供了的原生支持。

# 1. 预备知识

如果你想了解 Promise 的基础知识,可以通过自己的方式或下方的链接:

# 2. 用法简介

js中的用法:
中的Promise用法完全遵照Promise标准,正常使用即可

java穿透给js接口用法:
也支持promise回调,使用方法举例:
native Java代码:

import com.qcode.jsview.JsPromise

class SomeInterface {
  // 定义一个函数返回值要为void,最后一个参数是 JsPromise 类型的interface
  @JavascriptInterface
    public void testPromiseCall(int data1, string data2, final JsPromise promiseRet) {
    new Thread(()->{
      // 可以在任意线程调用反馈
      if (data1 == 0) {
        // 通过resolve来进行正向反馈,传输参数目前只支持 double, int, String
        promiseRet.resolve(data2);
      } else {
        // 通过reject进行否决反馈,传输参数目前只支持 int, String
        promiseRet.reject(data2)
      }
    }).start();
  }
}

...
JsView mJsViewHandle; // 可以从MinApp句柄中获取jsview对象句柄
...

// 向js声明 window.jSomeInterface
mJsViewHandle.addJavascriptInterface("jSomeInterface", new SomeInterface());

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

js使用上述接口的代码

// 使用window下的 addJavascriptInterface 的第一个参数的名称来访问java穿透类
// 通过访问 @JavascriptInterface 修饰的接口名来访问接口,
// 输入参数个数比java声明的少最后那个JsPromise,调用后的返回值是一个标准的js的promise
let ret = window.jSomeInterface.testPromiseCall(0/* data1 */, "someText"/* data2 */);
ret.then((data2)=>{
  // 接受java端 resolve 的反馈
}).catch(()=>{
  // 接受java端 reject 的反馈
})

1
2
3
4
5
6
7
8
9
10

特别注意

引入会出问题的npm模块
例如: import { Promise } from 'core-js'
此处理会覆写本系统自带的Promise处理,导致router的懒加载功能异常,引发懒加载完成后不执行代码问题

Last Updated: 5/8/2024, 3:23:36 AM