2017-11-28 8 views
0

NativeModule은 입니다. 자바 스크립트에서 호출합니다.네이티브 안드로이드 NativeModule 약속이 해결되지 않거나 거부되지 않습니다.

이 메서드는 사용자가 몇 가지 작업을 수행 한 다음 반응 작업으로 돌아갈 활동을 시작합니다. 활동 결과를 검사 한 후 나는 resolve 또는 reject로 약속했습니다.

그러나 promise.resolve(...) 또는 promise.reject(...)은 JS면에서는 효과가 없습니다. 나는 결코 약속 된 결과를 얻지 못한다. 어쩌면 그것은 어떤 Thread 문제와 관련이 있을까요? 또는 React 활동이 포 그라운드로 돌아 가기 전에 약속이 해결 될 수 있습니까?

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
당신이 인스턴스에 당신의 약속을 포함하고 유를 사용할 필요가 위치를 호출 할 수있는 변수를 시도 할 수 있습니다

:.

promiseCallback.invoke(<params>); 
+0

이것은 OP의 질문을 해결하지 않습니다. –

0

그래서 해결책을 찾았습니다. React 네이티브 활동이 다시 시작되기 전에 문제가 OAuth 처리기와 관련이있는 것으로 보입니다. 그래서 기본적으로 Activity onResume() 메서드에서 결과를 확인하고 약속을 해결합니다.