React Native原生模块回调不执行是怎么回事?
我写了个Android原生模块,通过Bridge调用后JS端收不到回调,promise也不resolve,卡住了。
Java那边确实执行完了,也调了promise.resolve("ok"),但RN这边.then()完全没反应。是不是线程问题?试过在主线程调用还是不行。
@ReactMethod
public void doSomething(Promise promise) {
// 模拟耗时操作
new Thread(() -> {
try {
Thread.sleep(1000);
promise.resolve("done");
} catch (Exception e) {
promise.reject("ERR", e);
}
}).start();
}
可以这样改写代码,保证resolve在UI线程中执行:
这样做更清晰,也符合React Native的设计原则。记得要导入相关依赖,比如reactContext和ui线程工具类。另外提醒下,尽量避免在原生模块中使用长时间阻塞的操作,会影响性能体验。
要是还有问题,检查下promise.reject是否被触发了,有时候异常捕获不当也会导致看起来像没回调的情况。这种异步调用场景真的挺容易踩坑的。