来自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
。
请记住,您可能需要发送sendPluginResult
的CDVPluginResult
,其中keepCallback
为false
以释放您不再需要的callbackId
。