Я пытаюсь использовать async/await, но возврат не ожидается.
Это функция async с ожиданием.
async _checkEmailDuplication() {
try {
console.log('Check Email Duplication is called');
let res = await MyNetwork.checkEmail(this.state.email);
console.log('Check email return value: ' + res);
if (res === 0) {
console.log('Available Email');
return false;
}
else {
console.log('Email Duplication Check Error');
return true;
}
}
catch (e) {
console.error('Check Email Call Error', e.message);
return true;
}
console.log('What happened?');
return true;
}
Он вызывает функцию checkEmail, и здесь приведено определение функции электронной почты проверки
export type EmailCheckResponse = { ret?: number };
class Network {
constructor() {
this._network = NativeModules.NetworkService;
}
checkEmail = (email: string): Promise<EmailCheckResponse> => {
console.log('Network CheckEmail is called');
return this._network.checkEmail(email);
}
}
Это реактивный модуль и пытается использовать Nativemodules из iOS.
А вот компонент Objective-C Native экспортирует часть.
RCT_EXPORT_METHOD(checkEmail:(NSString *)email
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)
{
@autoreleasepool {
[GRPCCall useInsecureConnectionsForHost:kHostAddress];
AccountService *client = [[AccountService alloc] initWithHost:kHostAddress];
EmailCheckRequest *request = [EmailCheckRequest message];
request.email = email;
NSLog(@"Requested Email: %@\n", request.email);
[client checkEmailWithRequest:request handler:^(EmailCheckResponse *response, NSError *error) {
NSLog(@"Email Check result: %d\n", response.ret);
}];
}
}
Проблема в том, что после вызова checkEmail он застрял. Без возврата.
В журнале говорится:
2017-07-16 16: 01: 29.355 [info] [tid: com.facebook.React.JavaScript] Проверять электронную почту Дублирование называется 2017-07-16 16: 01: 29.356 [info] [tid: com.facebook.React.JavaScript] Network CheckEmail называется 2017-07-16 16: 01: 29.364 [50446: 3725293] Запрошенная электронная почта: [email protected] 2017-07-16 16: 01: 29.384 [50446: 3725170] Электронная почта Результат проверки: 0
Кажется, что модуль Objective-C был вызван успешно, но не вернулся. После вызова waitEmail ничего не происходит.
Есть ли кто-нибудь, кто может сказать, что не так с моими кодами? знак равно
Я могу видеть из вашей реализации встроенного модуля React, вы забыли вызвать resolve
и reject
методов, которые имеют решающее значение для работы, обещают, как они обещали работать.
[client checkEmailWithRequest:request handler:^(EmailCheckResponse *response, NSError *error) {
NSLog(@"Email Check result: %d\n", response.ret);
if(response){
resolve(response);
}else{
reject(@"no_events", @"There were no events", error);
}
}
];
Надеюсь, это поможет вам.