I have troubles with firing immediately subsequent callbacks from a cordova plugin (an iOS one). In XCode debugger I clearly see it steps over
[self.commandD
So, the issue wasn't in threading/queueing.
It turned out that you are allowed to use a callbackId
only once unless you tell Cordova not to cleanup that callbackId
by setting CDVPluginResult.keepCallback
to true
. Pay attention that keepCallback
isn't a BOOL
property, so you may need to call [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];
What messes things up is that if you introduce a blocking call like alert()
in that callback, Cordova will let you make multiple successive sendPluginResult
with the same callbackId
.
Keep in mind that you may need to sendPluginResult
with a CDVPluginResult
which keepCallback
is false
to release the callbackId
that you don't need anymore.