Javascript: никогда не возвращается из ожидания

1

Я пытаюсь использовать 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 ничего не происходит.

Есть ли кто-нибудь, кто может сказать, что не так с моими кодами? знак равно

Теги:
promise
react-native-ios

1 ответ

0
Лучший ответ

Я могу видеть из вашей реализации встроенного модуля 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);
       }
 }
];

Надеюсь, это поможет вам.

  • 0
    Потрясающие! У меня нет базовых знаний Objective-C, и эта часть была еще одним вопросом, который меня интересовал. Одна вещь, чтобы добавить. Отклонить (RCTPromiseRejectBlock) теперь принимает 3 аргумента.
  • 0
    Обновил ответ. Если это решило вашу проблему, пожалуйста, примите ответ.
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню