Cordova (Ionic2)自定义插件:用Cordova .exec() successHandler管理Angul



我正在构建一个Cordova插件Ionic2一起使用。我对Cordova(和自定义插件)很有经验,但对Ionic2很陌生(因此也是Angular2的, TypeScript)。

(我现在问的是什么,我曾经用Jquery Deferred来管理它)

在我的"app.component.ts"文件中有:

import...
declare var MyPlugin: any;
@Component({
  templateUrl: 'app.html'
})
export class MyApp {
  ...
  initializeApp() {
    this.platform.ready().then(() => {
      StatusBar.styleDefault();
      MyPlugin.action();
    });
  }
  ...
}

我不会详细说明我的插件的"plugin.xml"文件。

"MyPlugin.js"是这样的:

var PLUGIN_NAME = "MyPlugin";
var MyPlugin =function(){};
MyPlugin.action(){
    cordova.exec(
        successResultHandler,
        errorResultHandler,
        PLUGIN_NAME,
        action,
        []
    );
} 
exports.module=MyPlugin;

在我的Java类链接到"MyPlugin.js"文件,我有一些像:

public class MyPlugin extends CordovaPlugin {
    @Override
    public boolean execute(String action, final JSONArray args, final CallbackContext callbackContext) throws JSONException {
          //something async
          callbackContext.success()
    }
}

当Java类触发callbackContext.success时,JS的cordova.exec将启动函数successResultHandler我想知道如何使用Angular2的承诺来捕获异步事件?

我开始写一些代码,但是我应该使用的顺序没有意义。

我正在考虑在"MyPlugin.js"中做类似的事情:

MyPlugin.action(){
   return new Promise(function(resolve,reject){
    cordova.exec(
        successResultHandler,
        errorResultHandler,
        PLUGIN_NAME,
        action,
        []
    );
    });
} 

但是这当然没有任何意义,你怎么在resolve中捕获函数successResultHandler的结果呢?

有人知道吗?

Promise构造函数传递给回调函数的resolve和reject参数本身就是函数,所以你应该能够做这样的事情:

MyPlugin.action(){
   return new Promise((resolve,reject) => {
        cordova.exec(
            resolve,
            reject,
            PLUGIN_NAME,
            action,
            []
        );
    });
};

然后像这样调用:

MyPlugin.action().then(() => {
    console.log("Success");
},(err) => {
    console.error(err);
});

最新更新