反应天然Android NativeModule Promise无法解决或拒绝



我为Android构建了一个React本机NativeModule,该Android带有我从JavaScript拨打的@ReactMethod

该方法启动了一项活动,在该活动中,用户可以做一些事情,然后返回React活动。检查活动结果后,我决定进行resolvereject承诺。

但是promise.resolve(...)promise.reject(...)在JS侧没有效果。我从来没有得到应许的结果。也许这与一些Thread问题有关?或者,也许在React活动回到前景之前已解决诺言?

为什么promise.resolve()不能解决JS侧的承诺?

这是我从JS

调用的方法
 @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!
    }

我正在将promise对象存储在类中,以在活动完成后稍后解决或拒绝。但它不会通知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;
            }
        }
      };
    }

,所以我找到了一个解决方案。似乎问题与在恢复React本机活动之前被执行的Oauth处理程序有关。因此,我基本上检查了活动onResume()方法中的结果并解决承诺。

您可以尝试实例一个包含您承诺的变量以及您需要在哪里使用它可以调用:

promiseCallback.invoke(<params>);

相关内容

  • 没有找到相关文章

最新更新