来自Cordova iOS插件的后续回调不会触发

从cordova插件(iOS版)中立即触发后续回调,我遇到了麻烦。 在XCode调试器中,我清楚地看到它的步骤

[self.commandDelegate sendPluginResult:pluginResult callbackId:monitoredRegions.callbackId]; 

几次(紧接着连续),每次都有一个略有不同的pluginResult 。 这会被触发

 [locationManager requestStateForRegion:region]; 

我不能(也不能)控制。

问题是,在Javascript方面,回调只被触发一次。

什么(实际上不是那么)奇怪的是,如果我在回调中引入一些阻塞,比如alert() ,则回调会多次触发(如预期的那样)。 这很酷,但我不需要应用程序中的任何alert()

如果我理解它, commandDelegate应该处理线程和排队,但它似乎没有。 问题是,每次调用sendPluginResult时如何获取JS回调。

非常感谢!

所以,问题不在于线程/排队。

原来你只允许使用一次callbackId除非你告诉Cordova不要通过将CDVPluginResult.keepCallback设置为true来清理那个callbackId 。 注意keepCallback不是BOOL属性,所以你可能需要调用[pluginResult setKeepCallbackAsBool:YES];

 CDVPluginResult* pluginResult = [sendPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:key]; [pluginResult setKeepCallbackAsBool:YES]; // here we tell Cordova not to cleanup the callback id after sendPluginResult() [self.commandDelegate sendPluginResult:pluginResult callbackId:monitoredRegions.callbackId]; 

sendPluginResult是,如果你在回调中引入了一个阻塞调用,例如alert() ,那么Cordova将允许你使用相同的callbackId创建多个连续的sendPluginResult

请记住,您可能需要发送sendPluginResultCDVPluginResult ,其中keepCallbackfalse以释放您不再需要的callbackId