React Native里原生模块调用后JS端收不到回调怎么办?
我在写一个自定义的原生模块,Android那边用Promise.resolve返回了数据,但JS这边调用后完全没反应,也不报错。试过加Log发现原生代码确实执行了,但JS的.then()根本没进。
原生方法是这么写的:
@ReactMethod
public void getData(Promise promise) {
try {
String result = "hello from native";
promise.resolve(result);
} catch (Exception e) {
promise.reject("ERR", e);
}
}
JS端调用就是普通的MyModule.getData().then(...),但then里的代码从来不跑,这是哪儿出问题了?
先说最常见的一个坑,JS端获取模块的方式要写对:
如果你写成了
NativeModules.MyModule.getData直接调用,可能会拿到undefined。然后检查一下你的Package有没有在MainApplication里注册,这个容易忘。在
MainApplication.java的getPackages()方法里,要把你的模块Package加进去:再有一个坑是方法名的问题,RN会把Java方法名的第一个字母转成小写,所以你的
getData在JS端调用的时候应该是MyModule.getData(),这个你写对了应该没问题。我之前还遇到过一种情况,就是原生模块的类没有正确继承
ReactContextBaseJavaModule,或者getName()返回的名字和JS端用的不一致,这个也要核对一下。如果这些都对,试试在JS端加个catch看看有没有错误被吞掉了:
大概率是模块注册的问题,你排查一下这几个地方。