# 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
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
2
3
4
5
6
7
8
9
10
特别注意
引入会出问题的npm模块
例如: import { Promise } from 'core-js'
此处理会覆写本系统自带的Promise处理,导致router的懒加载功能异常,引发懒加载完成后不执行代码问题