2017-09-06 16 views
1

こんにちはすべてから単一の呼び出しを許可するリアクト

私は、データを取得するためにサーバーに接続したときに、ネイティブプロジェクトを反応させるのにネイティブモジュールから受信したコールバックへの約束を使用してい

  • 最初、私は "LOGIN" 私はアクション "GET_LIST" と呼ばログインから受信したデータの後

しかしアクション "GET_LIST" の応答アクションと呼ばれ、私はRECE以下のように間違ったived:は、ネイティブのコールバックタイプが唯一のネイティブコード

09-06 08:48:22.117 13540-15635/? W/System.err: JNA: Callback [email protected] 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); 

私は誰かが

  • はネイティブバージョンに反応くれ

    追加情報を助けることができると思います。 0.47.2

  • プラットフォーム:IOS、 Androidの
  • 開発オペレーティングシステム:MacOSの
  • 開発ツール:Androidのメーカー、Xcodeの

答えて

0

はA ReactNativeプロミスオブジェクトは、JavaScriptの約束のように、一度だけ呼び出すことができます。ネイティブモジュールからJSに何度も何かを送信したい場合は、DeviceEventEmiterのようなものを使ってイベントパターンを使用する必要があります。