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;
}
}
};
}
これは、OPの質問を解決しません。 –