React Native:本机模块 return 无

React Native : Native modules return nothing

我是 React Native 的新手,我想调用本机模块以从 Android 获取一些字符串。我这样写代码:

@ReactMethod
public String getToken() {
    String token = "";
    //then take the token
    Log.i("getToken:", token);
    return token;
}

然后在js中使用

var tokenString = thismodule.getToken();

但是,当我调用js中的方法时。我可以在 logcat 中看到正确的日志“ I/getToken : palapalapala ”,但是 js 什么也得不到。

那么,正确的代码是什么?

哦,是的。我应该知道 。 js 和 native 之间的通信是异步的。桥接到本地方法的js方法,现在不能return任何东西。所以,我们必须向native发送一个回调函数,并在回调中得到正确的答案。

就这些了。

根据反应文档

要向 JavaScript 公开方法,必须使用 @ReactMethod 注释 Java 方法。 return 类型的桥接方法总是无效的。 React Native 桥是异步的,因此将结果传递给 JavaScript 的唯一方法是使用回调或发出事件

@ReactMethod
public void getToken(Callback callback) {
    String token = "";
    //then take the token
    Log.i("getToken:", token);
    callback.invoke(token);
}

thismodule.getToken((token) => {
  console.log('Result ',token);
 }
);

ReactMethod 是异步的。因此,如果您想从本机检索数据以响应本机,则需要将方法设置为 return 承诺。

在此处查看文档:https://reactnative.dev/docs/native-modules-android#promises

并且在您的 js 文件中,您需要等待该承诺或设置 then() 函数。

回调也像 Luo 写的那样工作。