如何知道Cordova中使用的回调函数是否相同?

时间:2017-03-22 04:46:42

标签: javascript cordova callback cordova-plugins

我正在尝试为我的android库开发一个cordova插件。以下是MyCordovaPlugin.js文件的一部分:

var exec = require('cordova/exec');

module.exports = {
  doA : function(message, successCallback) {
      exec(successCallback,
           null, // No failure callback
           "MyCordovaPlugin",
           "doA",
           [message]);
  },
  doB : function(message, successCallback) {
      exec(successCallback,
           null, // No failure callback
           "MyCordovaPlugin",
           "doB",
           [message]);
  }
};

如上所述,我有两个方法doA和doB,它们有两个参数 - message和successCallback。

在我的原生java代码中,我需要知道doA和doB中使用的successCallback是否相同。我怎样才能做到这一点?如何映射javascript函数以便我可以检查它是否已被再次使用?

我的本​​机java代码中有callbackContext值。但调用时的值会有所不同。

1 个答案:

答案 0 :(得分:0)

无法在本机级别区分一个Javascript函数与另一个Javascript函数,因为本机层只是传递了一个随机生成的ID,用于调用正确的Javascript回调函数。

所以我会向你的插件方法传递一个额外的参数,它允许你在原生级别上解析它。

这样的事情:

myPlugin.js

var exec = require('cordova/exec');

module.exports = {
  doA : function(message, successCallback, callbackName) {
      exec(successCallback,
           null, // No failure callback
           "MyCordovaPlugin",
           "doA",
           [message, callbackName]);
  },
  doB : function(message, successCallback, callbackName) {
      exec(successCallback,
           null, // No failure callback
           "MyCordovaPlugin",
           "doB",
           [message, callbackName]);
  }
};

myApp.js

function foo(){
    console.log("foo");
}

function bar(){
    console.log("bar");
}

myPlugin.doA("Some message", foo, "foo");
myPlugin.doB("Some message", foo, "foo");
myPlugin.doA("Some message", bar, "bar");
myPlugin.doB("Some message", bar, "bar");

myPlugin.java

public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
    String message = args.getString(0);
    String callbackName = args.getString(1);
    // etc
}