プロミスとのネイティブ反応を行うためにobjective-cメソッドをエクスポートしようとしていますが、 objective-cが正しいデータを返すにもかかわらず、常にnullです。Objective-CからPromiseへのネイティブReactへの(bridging)メソッドのエクスポート:nullを返す
ここに私の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);
if (response) {
NSLog(@"Resolved response\n");
resolve(response);
}
else {
NSLog(@"Rejected response\n");
reject(@"no_events", @"There was no event", error);
}
}];
}
}
そして、反応固有のサイドメソッドの定義は、このようなものです。
checkEmail = (email:string) => {
console.log('Network Check Email is called');
return this._network.checkEmail(email);
}
または
checkEmail = (email:string) => {
return new Promise((resolve, reject) => {
console.log('Network Check Email is called');
this._network.checkEmail(email).then((res) => {
console.log('check email result: ' + res);
resolve(res);
});
});
}
私は両方のケースをテストしたが、のcheckEmailの戻り値は常にヌルです。
async _checkEmailDuplication() {
try {
console.log('Check Email Duplication is called');
const 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');
this.state.errMsg = WSStrings.errCodes[res];
return true;
}
}
catch (e) {
console.error('Check Email Call Error', e.message);
this.state.errMsg = e.message;
return true;
}
}
以下は、上記のコードを実行したときのXcodeのログです。
2017-07-18 00:51:43.781 [info][tid:com.facebook.React.JavaScript] Check Email Duplication is called
2017-07-18 00:51:43.782 [info][tid:com.facebook.React.JavaScript] Network Check Email is called
2017-07-18 00:51:43.839 [5782:110747] Requested Email: [email protected]
2017-07-18 00:51:43.872 [5782:109339] Email Check result: 2
2017-07-18 00:51:43.872 [5782:109339] Resolved response
2017-07-18 00:51:43.873 [info][tid:com.facebook.React.JavaScript] check email result: null
2017-07-18 00:51:43.874 [info][tid:com.facebook.React.JavaScript] Check email return value: null
2017-07-18 00:51:43.874 [info][tid:com.facebook.React.JavaScript] Email Duplication Check Error
それは正しいリターンコードを取得していないが、ちょうどNULLして次のステップに行くことができません。
Objective-Cコードまたは反応ネイティブコードに文法上の誤りはありますか?
私はObjective-Cの背景知識がなく、プロミスと反応ネイティブの橋で十分な経験がないので、誰かが助けてくれればそれは高く評価されます。