Javascript:永不从等待中返回

Javascript:永不从等待中返回,javascript,objective-c,promise,react-native-ios,Javascript,Objective C,Promise,React Native Ios,我试图使用async/await,但是await没有返回 这是带有wait的异步函数 async _checkEmailDuplication() { try { console.log('Check Email Duplication is called'); let res = await MyNetwork.checkEmail(this.state.email); console.log('Check email return va

我试图使用async/await,但是await没有返回

这是带有wait的异步函数

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函数,下面是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);
    }
}
问题是,在调用checkEmail后,它被卡住了。没有回报

日志上写着

2017-07-16 16:01:29.355[信息][tid:com.facebook.React.JavaScript]检查电子邮件复制被调用 2017-07-16 16:01:29.356[信息][tid:com.facebook.React.JavaScript]呼叫网络检查电子邮件 2017-07-16 16:01:29.364[50446:3725293]请求的电子邮件:xxx@xxx.com 2017-07-16 16:01:29.384[50446:3725170]电子邮件检查结果:0

似乎Objective-C模块调用成功,但没有返回。在呼叫Wait checkEmail后,什么也没有发生


有人能告诉我我的密码有什么问题吗=(

我可以从您的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);
       }
 }
];

希望这对您有所帮助。

我可以从您的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);
       }
 }
];

希望这对您有所帮助。

太棒了!我没有Objective-C背景知识,这一部分是我想知道的另一点。需要添加一件事。拒绝(RCTPromiseRejectBlock)现在接受3个参数。更新了答案。如果它解决了您的问题,请接受答案。就这么做了。我不习惯整个流程和UI,只是找到了“答案”按钮。无论如何,谢谢你的回答!!顺便说一句,即使我添加了解析/拒绝方法,checkEmail函数的返回值仍然为空。你知道为什么吗?当我在Objective-C中检查response.ret值时,有一个有效的返回值,它被交给了resolve方法,但是在Javascript中调用了checkEmail方法之后,返回值为null。“检查电子邮件返回值:null”让我知道日志序列。是“检查电子邮件返回值:null”日志发生在“电子邮件检查结果:%d\n”本机日志之前还是之后?太棒了!我没有Objective-C背景知识,这部分是我想知道的另一点。需要添加一件事。拒绝(RCTPromiseRejectBlock)现在接受3个参数。更新了答案。如果它解决了您的问题,请接受答案。就这么做了。我不习惯整个流程和UI,只是找到了“答案”按钮。无论如何,谢谢你的回答!!顺便说一句,即使我添加了解析/拒绝方法,checkEmail函数的返回值仍然为空。你知道为什么吗?当我在Objective-C中检查response.ret值时,有一个有效的返回值,它被交给了resolve方法,但是在Javascript中调用了checkEmail方法之后,返回值为null。“检查电子邮件返回值:null”让我知道日志序列。是否在“电子邮件检查结果:%d\n”本机日志之前或之后出现“检查电子邮件返回值:null”日志?