使用Bluebird将cordova插件转变为承诺

时间:2014-06-23 17:52:32

标签: cordova promise bluebird

我正在努力找到一个优雅的解决方案,将一个cordova插件调用变为蓝鸟的承诺,并且想知道是否有比这样做更好的方法:

            return new Promise(function (resolve, reject) {
                cordova.plugins.clipboard.paste(function (text) {
                    if (text !== null) {
                        view.show();
                        resolve(text);
                    }
                    else {
                        reject();
                    }
                });
            });

cordova插件功能&#34>粘贴"采用回调函数,在该回调中,我正在解决或拒绝承诺。还有比这更好的方法吗?

1 个答案:

答案 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();
});