【问题标题】:React Native callback type only permits a single invocation from native codeReact Native 回调类型只允许从本机代码进行一次调用
【发布时间】:2018-07-24 08:12:26
【问题描述】:

我正在使用 Promise 接收来自 React Native 项目的本机模块的回调,当我连接到服务器以获取数据时: * 首先,我将动作称为“LOGIN” * 收到登录数据后,我调用了“GET_LIST”操作,

但是操作“GET_LIST”的响应,我收到错误如下:

09-06 08:48:22.117 13540-15635/? W/System.err: JNA: Callback com.lnzekesi.SoLibraryModule$1@8f35faa threw the following exception:
09-06 08:48:22.119 13540-15635/? W/System.err: java.lang.RuntimeException: Illegal callback invocation from native module. This callback type only permits a single invocation from native code.
09-06 08:48:22.125 13540-15635/? W/System.err:    at com.facebook.react.bridge.CallbackImpl.invoke(CallbackImpl.java:30)
09-06 08:48:22.125 13540-15635/? W/System.err:    at com.facebook.react.bridge.PromiseImpl.resolve(PromiseImpl.java:32)
09-06 08:48:22.125 13540-15635/? W/System.err:    at com.lnzekesi.SharedLibraryModule$1.function_recv_msg(SharedLibraryModule.java:213)
09-06 08:48:22.125 13540-15635/? W/System.err:    at java.lang.reflect.Method.invoke(Native Method)
09-06 08:48:22.125 13540-15635/? W/System.err:    at com.sun.jna.CallbackReference$DefaultCallbackProxy.invokeCallback(CallbackReference.java:520)
09-06 08:48:22.125 13540-15635/? W/System.err:    at com.sun.jna.CallbackReference$DefaultCallbackProxy.callback(CallbackReference.java:551)
09-06 08:48:22.125 13540-15635/? W/System.err:    at com.sun.jna.Native.invokePointer(Native Method)
09-06 08:48:22.125 13540-15635/? W/System.err:    at com.sun.jna.Function.invokePointer(Function.java:490)
09-06 08:48:22.125 13540-15635/? W/System.err:    at com.sun.jna.Function.invoke(Function.java:434)
09-06 08:48:22.125 13540-15635/? W/System.err:    at com.sun.jna.Function.invoke(Function.java:354)
09-06 08:48:22.125 13540-15635/? W/System.err:    at com.sun.jna.Library$Handler.invoke(Library.java:244)
09-06 08:48:22.125 13540-15635/? W/System.err:    at java.lang.reflect.Proxy.invoke(Proxy.java:393)
09-06 08:48:22.125 13540-15635/? W/System.err:    at $Proxy2.cli_wait(Unknown Source)

这是我从本地模块调用的回调:

onMsg = new SoLib.fnCallback() {
    public synchronized void recvMsg(Pointer cli, final Pointer msg) {
        promise.resolve(getResponse(msg, resIndex));
        //always delete recv msg
        SoLib.msgDelete(msg);
    }
};

SoLib.cliRegOnMsg(cli, onMsg);
SoLib.cliConnect(cli);

附加信息

  • React Native 版本:0.47.2
  • 平台:IOS、Android
  • 开发操作系统:MacOS
  • 开发工具:Android Studio、Xcode

【问题讨论】:

    标签: reactjs react-native


    【解决方案1】:

    一个 ReactNative Promise 对象,就像一个 JavaScript Promise,只能被调用一次。如果您想从本机模块多次向 JS 发送某些内容,您应该使用类似 DeviceEventEmiter androidios 的事件模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-09
      • 2020-03-17
      • 1970-01-01
      • 2020-10-25
      • 2016-07-15
      相关资源
      最近更新 更多