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;
}
}
};
}
이것은 OP의 질문을 해결하지 않습니다. –