我試圖使用async/await,但是沒有從等待中返回。Javascript:永遠不會從等待中返回
這是等待異步功能。
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的本機模塊出口部分。
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年7月16日16:01:29.355 [信息] [TID:com.facebook.React.JavaScript]檢查電子郵件複製被稱爲 2017年7月16日16:01: 29.356 [信息] [TID:com.facebook.React.JavaScript]網絡CheckEmail被稱爲 2017年7月16日16:01:29.364 [50446:3725293]請求的電子郵件:[email protected] 2017年7月16日16 :01:29.384 [50446:3725170]電子郵件檢查結果:0
看來,Objective-C的模塊被成功調用,但沒有從未來回來。在調用await checkEmail之後,沒有任何反應。
是否有任何人誰可以告訴什麼是錯我的代碼? =(
真棒!我沒有Objective-C的背景知識,這部分是我想知道的另一點。 有一點要補充。拒絕(RCTPromiseRejectBlock)現在需要3個參數。 – Spike
更新了答案。如果它解決您的問題,請接受答案WER。 – yaswanthsvist
剛剛做到了。我不習慣整體流程和用戶界面,只是找到了「答案」按鈕。無論如何,謝謝你的回答! – Spike