1

我试图找到一个优雅的解决方案来将科尔多瓦插件调用变成蓝鸟承诺,并且想知道是否有比做这样的事情更好的方法:

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

科尔多瓦插件函数“粘贴”采用回调函数,在该回调中我正在解决或拒绝承诺。还有比这更好的方法吗?

4

1 回答 1

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
});

调用承诺函数:

cordova.plugins.clipboard.pasteAsync().then(function(text) {
    view.show();
});
于 2014-06-24T14:05:00.997 回答