2017-11-28 3 views
0

NativeModuleは、のjavacriptから呼び出されます。ネイティブのアンドロイドNativeModuleの約束が解決または拒否しない

このメソッドは、ユーザーが何らかの処理を行い、反応アクティビティに戻るアクティビティを開始します。活動結果を調べた後、私はresolveまたはrejectと約束します。

しかし、promise.resolve(...)またはpromise.reject(...)はJS側で効果がありません。私は約束の結果を得ることはありません。たぶんそれはいくつかThread問題と関係がありますか?あるいは、リアクション活動がフォアグラウンドに戻る前に、約束が解決されているかもしれませんか?

なぜpromise.resolve()がJS側の約束を解決しないのですか?

これは私が活動を終了したときに、後でそれを解決するか、拒否するクラスでpromiseオブジェクトを格納しています

@ReactMethod 
    public void login(final String appClientID, final String appSecretID, final String appName, final String returnURLScheme, Promise promiseCallback) { 

     // Clear promise if there was a pending one 
     if (promise != null) { 
      promise.reject("Login error", "Pending promise found, so we reject it. Did you try to call login twice?"); 
      promise = null; 
     } 

     // Get foreground activity 
     Activity mContext = getCurrentContext(); 
     // Configure settings 
     OAuthLogin mOAuthLoginModule = OAuthLogin.getInstance(); 
     mOAuthLoginModule.init(mContext, appClientID, appSecretID, appName); 
     // Start oauth login in a new activity 
     mOAuthLoginModule.startOauthLoginActivity(mContext, mOAuthLoginHandler); 
     // Store the promise to resolve later. 
     promise = promiseCallback; 
// If i do here promise.resolve('authorized'); the promise works! 

    } 

JS

から呼び出す方法です。しかし、それはJS側に通知しません。

これは、ユーザーが終了すると、ログイン時に実行されるアクティビティコールバックです

public static void setUpCallback(final Context mContext) { 
     mOAuthLoginHandler = new OAuthLoginHandler() { 
      @Override 
      public void run(final boolean success) { 
       OAuthLogin mOAuthLoginModule = OAuthLogin.getInstance(); 
       if (success) { 
        String accessToken = mOAuthLoginModule.getAccessToken(mContext); 
        promise.resolve(accessToken); // This does not work. JS promise is never resolved and goes to limbo 
        promise = null; 
       } else { 
        String errorCode = mOAuthLoginModule.getLastErrorCode(mContext).getCode(); 
        String errorDesc = mOAuthLoginModule.getLastErrorDesc(mContext); 
        promise.reject("Oauth Login error code " + errorCode, errorDesc); // This does not work. JS promise is never rejected and goes to limbo 
        promise = null; 
      } 
     } 
     }; 
    } 

答えて

0

インスタンスにあなたの約束とここで、uはあなたが呼び出すことができ、それを使用する必要が含まれている変数試すことができます。

promiseCallback.invoke(<params>); 
+0

これは、OPの質問を解決しません。 –

0

私は解決策を見つけました。 Reactネイティブアクティビティが再開される前に、そのOAuthハンドラが実行されるという問題があるようです。だから私は基本的に結果を確認して、アクティビティonResume()メソッドと約束を解決します。

関連する問題