Javascript:永不从等待中返回
我试图使用async/await,但是await没有返回 这是带有wait的异步函数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 _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”日志?