我正在构建 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 Promise来捕获异步事件???
我开始编写一些代码,但它对我应该使用的顺序没有意义。
我想在" MyPlugin.js"中做类似的事情:
MyPlugin.action(){
return new Promise(function(resolve,reject){
cordova.exec(
successResultHandler,
errorResultHandler,
PLUGIN_NAME,
action,
[]
);
});
}
但当然它没有任何意义,你如何以successResultHandler
的方式捕捉到resolve
函数的结果。
有人有想法吗?
答案 0 :(得分:3)
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);
});