javascript - 原生代码方法返回未定义而不是字符串
我有一个简单的正在运行的 react-native 测试项目,我想在其中运行一些原生代码。我按照开发指南操作,在我的 Android 项目中有一个 module 和一个 package 类,并且我在 MainApplication 文件中链接了它们。它们看起来像这样:
包裹:
public class ModulePackage implements ReactPackage {
@NonNull
@Override
public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new ModuleModule(reactContext));
return modules;
}
@NonNull
@Override
public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {
return Collections.emptyList();
}
}
以及模块:
@ReactModule(name = ModuleModule.NAME)
public class ModuleModule extends ReactContextBaseJavaModule {
public static final String NAME = "ModuleModule";
@ReactMethod
public String getData() {
return "AAAAAAAAAAAAAAAAA";
}
}
现在我在 JavaScript 中按如下方式导入模块:
const { ModuleModule} = NativeModules;我在这一行设置了一个断点,在断点处暂停并单步过一次,让模块加载进来后,我进入控制台检查函数是否存在,所以我检查了 ModuleModule,它返回了 Object {getData: Function, getConstants: Function}。所以函数显然是存在的,我只是从未得到我预期的返回值。有谁之前遇到过类似的情况吗?
答案#1
根据文档,您必须使用 Promise 将数据返回到 JS 接口/桥接。https://reactnative.dev/docs/native-modules-android#promises
你的实现将更改为
@ReactMethod
public void getData(Promise promise) {
promise.resolve("AAAAAAAAAAAAAAAAA");
}
