gpt4 book ai didi

javascript - react native android native 模块 promise 不会解决或拒绝

转载 作者:行者123 更新时间:2023-11-29 14:12:46 25 4
gpt4 key购买 nike

我为 Android 构建了一个 react native NativeModule,它有一个我从 javascript 调用的 @ReactMethod

该方法启动一个 Activity ,用户将在其中做一些事情,然后返回到 React Activity 。检查 Activity 结果后,我决定解决拒绝 promise 。

但是 promise.resolve(...)promise.reject(...) 在 JS 端没有效果。我从来没有得到 promise 的结果。也许它与某些 Thread 问题有关?或者,也许在 React Activity 返回前台之前, promise 已得到解决?

为什么 promise.resolve() 不能解析 JS 端的 promise?

这是我从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 对象存储在类中,以便稍后在 Activity 完成时解决或拒绝它。但它不会通知 JS 端。

这是在用户完成登录时执行的 Activity 回调。

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 native Activity 恢复之前执行的 OAuth 处理程序有关。所以我主要检查 Activity onResume() 方法中的结果并解决 promise 。

关于javascript - react native android native 模块 promise 不会解决或拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47525403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com