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

时间:2014-03-18 04:13:44

标签: cordova

我的iOS PhoneGap应用程序适用于PhoneGap 2.2.0,但不适用于PhoneGap 2.3.0+。 下面的代码片段在带有PhoneGap 2.2.0和2.3.0 +的iPhone模拟器6.1中表现不同:

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',因为"返回msg"在onSuccess()回调完成之前达到语句。 我怀疑在PhoneGap 2.2.0中完成cordova.exec()时会同步返回onSuccess()回调,但在PhoneGap 2.3.0+中,onSuccess()回调是异步的。

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

非常感谢!

1 个答案:

答案 0 :(得分:0)

也许这个可以帮到你

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

<feature name="CustomPlugin">
      <param name="ios-package" value="CustomPlugin" />
</feature>

使用Objective-C代码实现插件

CustomPlugin.h

#import <Foundation/Foundation.h>
#import <Cordova/CDV.h>

@interface CustomPlugin : CDVPlugin

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

@end

CustomPlugin.m

#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

从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);
}