太棒了,所以我明白了,有一個名爲RCTResponseSenderBlock的結構。我又
iOS的方法:
-(void)tmpMethod:(RCTResponseSenderBlock)callback{
[self.bridge.eventDispatcher sendAppEventWithName:@"channel" body:@{@"Block":callback}
] ;
}
javascriptReciever:
EventEmitter.addListener("channel", async event => {
console.log(event)
event.Block(["Hello There"]);
return;
});
IOS方法調用:
[self tmpMethod:^(NSArray* response){
NSLog((NSString*)[response objectAtIndex:0]); //prints Hello There
}];
UPDATE 原來,當我嘗試做同樣的對於Android,我不能。 Android平臺使用WriteableMap或WriteableArray使用下面的方法來發送事件:
private void sendEvent(ReactContext reactContext,
String eventName,
@Nullable WritableMap params) {
reactContext
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, params);
}
WriteableMap和WriteableArray雙方不接受的對象,如這使得它不可能要求從JavaScript端信息的回調。我也試圖傳入一個Promise,而不是WriteableMap或WriteableArray,並且拋出一個錯誤。要針對Android同步上下文異步通信,
- 我必須從本地發送事件的JavaScript
- 鎖兩次,以防止進一步的執行在側本地
- 我的JavaScript端調用方法一旦查看請求與請求的數據
- 在由javascript調用的本機方法內解鎖
- 自從程序解鎖後恢復執行
- 在處理需要同步處理的任何內容後再解鎖一次。(註釋如果你想我的代碼執行)
再次編輯: 上述流程沒有工作。由於ReactNative始終使用主線程,因此我無法控制Android中的線程。所以如果我最終鎖定了主線程,那麼react-native不能輸入另一種方法來解鎖,因此我有死鎖。所以不可能強制與android同步交換數據。