我正在努力找到一个优雅的解决方案,将一个cordova插件调用变为蓝鸟的承诺,并且想知道是否有比这样做更好的方法:
return new Promise(function (resolve, reject) {
cordova.plugins.clipboard.paste(function (text) {
if (text !== null) {
view.show();
resolve(text);
}
else {
reject();
}
});
});
cordova插件功能&#34>粘贴"采用回调函数,在该回调中,我正在解决或拒绝承诺。还有比这更好的方法吗?
答案 0 :(得分:2)
为cordova惯例定义一个通用的promisifer:
function CordovaPromisifer(fn) {
return function() {
var args = [].slice.call(arguments);
var self = this;
return new Promise(function(resolve, reject) {
args.push(function(result) {
if (result !== null) {
resolve(result);
} else {
// For the stack trace.
reject(new Error("cordova error"));
}
});
fn.apply(self, args);
});
}
}
用它来宣传东西:
Promise.promisifyAll(cordova.plugins.clipboard, {
promisifier: CordovaPromisifer
});
调用promisified函数:
cordova.plugins.clipboard.pasteAsync().then(function(text) {
view.show();
});