网站搜索

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");    
}