cordova.exec()完成后,iOS PhoneGap onSuccess()回调是否同步返回?

cordova.exec()完成后,iOS PhoneGap onSuccess()回调是否同步返回?,cordova,Cordova,我的iOS PhoneGap应用程序适用于PhoneGap 2.2.0,但不适用于PhoneGap 2.3.0+。 下面的代码片段在iPhone Simulator 6.1中与PhoneGap 2.2.0和2.3.0+的行为不同: var msg = "N/A"; EchoSession.prototype.getMessage = function() { cordova.exec(onSuccess, onFail, "Echo", "echo", "hello-world");

我的iOS PhoneGap应用程序适用于PhoneGap 2.2.0,但不适用于PhoneGap 2.3.0+。 下面的代码片段在iPhone Simulator 6.1中与PhoneGap 2.2.0和2.3.0+的行为不同:

var msg = "N/A";

EchoSession.prototype.getMessage = function() {
    cordova.exec(onSuccess, onFail, "Echo", "echo", "hello-world");
    console.log("message: " + msg);
    return msg;
};

function onSuccess(ret)
{
    console.log("onSuccess: ret is " + ret);
    msg = "output: " + ret;
}
其中,
Echo
是PhoneGap插件,
Echo.Echo(param)
只返回传递给它的param值

对于PhoneGap 2.2.0,
getMessage()
返回预期结果,但是对于PhoneGap 2.3.0+,
getMessage()
返回“N/A”,这是“msg”的默认值,因为“return msg”语句是在onSuccess()回调完成之前到达的。 我怀疑在PhoneGap 2.2.0中完成cordova.exec()时,onSuccess()回调是同步返回的,但在PhoneGap 2.3.0+中,onSuccess()回调是异步的

你们对这个问题有什么想法吗? iOS版PhoneGap 2.3.0是否有任何可能导致行为差异的变化? 我可以在PhoneGap 2.3.0+的iOS版中使
onSuccess()
回调同步吗


非常感谢

也许这个能帮你

确保您已经在config.xml中定义了插件

<feature name="CustomPlugin">
      <param name="ios-package" value="CustomPlugin" />
</feature>
从JavaScript调用插件

function initial(){
    var name = $("#NameInput").val();
    cordova.exec(sayHelloSuccess, sayHelloFailure, "CustomPlugin", "sayHello", [name]);
}

function sayHelloSuccess(data){
    alert("OK: " + data);
}

function sayHelloFailure(data){
    alert("FAIL: " + data);
}

谢谢但是我已经实现了
Echo
插件,并且在PhoneGap2.2.0中一切都很好。我的问题是,为什么同一个应用程序不适用于PhoneGap 2.3.0+,PhoneGap 2.3.0+中的onSuccess()回调处理是否有任何变化?我认为这段代码可以在cordova v2和v3上运行。我目前的cordova版本是3.4。它很好用。
#import "CustomPlugin.h"

    @implementation CustomPlugin

    - (void)sayHello:(CDVInvokedUrlCommand*)command{

        NSString *responseString =
            [NSString stringWithFormat:@"Hello World, %@", [command.arguments objectAtIndex:0]];

        CDVPluginResult *pluginResult =
            [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:responseString];

        [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
    }

    @end
function initial(){
    var name = $("#NameInput").val();
    cordova.exec(sayHelloSuccess, sayHelloFailure, "CustomPlugin", "sayHello", [name]);
}

function sayHelloSuccess(data){
    alert("OK: " + data);
}

function sayHelloFailure(data){
    alert("FAIL: " + data);
}