我想在gcloud软件包中宣传所有方法,但是我做错了。
const Promise = require('bluebird');
const gcloud = Promise.promisifyAll(require('gcloud'));
//no problem when passing a callback into it
bucket.getFiles((err, files) => {
console.log(files)
})
//Complain error -> bucket.getFilesAsync is not a function
bucket.getFilesAsync().then((files) => {
console.log(files)
})
当我在async
抱怨promisifyAll
之后调用bucket.getFilesAsync is not a function
方法时,我尝试使用ES6承诺来宣传该方法。
const bucketFiles = new Promise((resolve, reject) => {
bucket.getFiles((err, files) => {
if (err) return reject(err);
resolve(files);
});
});
bucketFiles.then((files) => {
console.log(files)
})
使用ES6方式的这种宣传是有效的,但我不想通过这样做来宣传每种方法。所以,我希望bluebird
能为我宣传一切。
我可以知道如何使用bluebird宣传gcloud包吗?
答案 0 :(得分:2)
根据Promisification的文档:
通过浏览对象的属性来宣传整个对象 并在对象上创建每个函数的异步等价物 它的原型链。
那么,你宣传gcloud
对象,它没有任何关于promisify存储桶,导致它的另一个类。
您可以为Bucket的每个实例
执行此操作Promise.promisifyAll(bucket);
或者为应用程序修补Bucket的原型
Promise.promisifyAll(require('gcloud/lib/storage/bucket').prototype);