Ich habe Probleme damit, sofort nachfolgende Callbacks von einem cordova-Plugin (einem iOS) zu feuern. Im XCode-Debugger sehe ich es deutlich über
%Vor% mehrmals (in unmittelbarer Folge), jedes Mal mit einem etwas anderen pluginResult
.
Das wird ausgelöst durch
was ich nicht kontrolliere (und nicht kann).
Das Problem ist, dass auf der Javascript-Seite der Callback nur einmal ausgelöst wird.
Was (eigentlich nicht so) seltsam ist, ist, dass, wenn ich eine Blockierung in diesen Callback einfüge, wie alert()
, der Callback (wie erwartet) mehrmals ausgelöst wird. Das ist cool, aber ich brauche keine alert()
in der App.
Wenn ich es verstehe, sollte commandDelegate
sich um Threading und Warteschlangen kümmern, scheint aber nicht. Die Frage ist, wie man den JS-Callback jedes Mal ausgelöst bekommt, wenn sendPluginResult
aufgerufen wird.
Vielen Dank!
Das Problem war also nicht Threading / Queuing.
Es stellte sich heraus, dass Sie callbackId
nur einmal verwenden dürfen, es sei denn, Sie raten Cordova, den callbackId
nicht zu bereinigen, indem Sie CDVPluginResult.keepCallback
auf true
setzen. Achten Sie darauf, dass keepCallback
keine BOOL
-Eigenschaft ist, daher müssen Sie möglicherweise [pluginResult setKeepCallbackAsBool:YES];
Was vermasselt ist, dass, wenn Sie in diesem Callback einen blockierenden Aufruf wie alert()
einführen, Cordova Ihnen erlaubt, mehrere aufeinanderfolgende sendPluginResult
mit demselben callbackId
zu erstellen.
Beachten Sie, dass Sie möglicherweise sendPluginResult
mit einem CDVPluginResult
verwenden müssen, das keepCallback
ist false
, um das callbackId
freizugeben, das Sie nicht mehr benötigen.
Tags und Links cordova objective-c ios phonegap-plugins cordova-plugins