我在从 cordova 插件(iOS 插件)立即触发后续回调时遇到麻烦。
在 XCode 调试器中,我清楚地看到它跳过了
[self.commandDelegate sendPluginResult:pluginResult callbackId:monitoredRegions.callbackId];
多次(立即连续),每次都略有不同pluginResult
。
这会被触发
[locationManager requestStateForRegion:region];
我无法(也无法)控制。
问题是,在 Javascript 方面,回调仅被触发一次。
什么(实际上不是那么)奇怪的是,如果我在该回调中引入一些阻塞,例如alert()
,回调被触发多次(如预期)。这很酷,但我不需要任何alert()
在应用程序中。
如果我理解的话,commandDelegate
应该处理线程和队列,但似乎没有。问题是,如何让 JS 每次回调被触发sendPluginResult
被叫。
非常感谢!
所以,问题不在于线程/队列。
事实证明,您可以使用callbackId
只有一次unless你告诉科尔多瓦不要清理它callbackId
通过设置CDVPluginResult.keepCallback
to true
。请注意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];
使事情变得混乱的是,如果你引入像这样的阻塞调用alert()
在该回调中,Cordova 将让您连续进行多个sendPluginResult
与相同的callbackId
.
请记住,您可能需要sendPluginResult
with a CDVPluginResult
which keepCallback
is false
释放callbackId
你不再需要了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)