使用Bluebird承诺宣传gcloud

时间:2016-04-07 06:21:21

标签: node.js google-app-engine promise bluebird es6-promise

我想在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包吗?

1 个答案:

答案 0 :(得分:2)

根据Promisification的文档:

  

通过浏览对象的属性来宣传整个对象   并在对象上创建每个函数的异步等价物   它的原型链。

那么,你宣传gcloud对象,它没有任何关于promisify存储桶,导致它的另一个类。

您可以为Bucket的每个实例

执行此操作
Promise.promisifyAll(bucket);

或者为应用程序修补Bucket的原型

Promise.promisifyAll(require('gcloud/lib/storage/bucket').prototype);