2016-04-07 10 views
0

gcloudパッケージのすべてのメソッドを約束したいが、エラーが出る。 Bluebirdの約束を使って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) 
}) 

は、私はそれが bucket.getFilesAsync is not a function文句 promisifyAllasyncメソッドを呼び出したときに、私はES6の約束を使用して方法をpromisifyしてみてください。

const bucketFiles = new Promise((resolve, reject) => { 
    bucket.getFiles((err, files) => { 
     if (err) return reject(err); 

     resolve(files); 
    }); 
}); 

bucketFiles.then((files) => { 
    console.log(files) 
}) 

ES6の方法を使用してこのpromisificationが働いているが、私はこれを行うことによって、各メソッドをpromisifiyしたくありません。ですから、私はすべてのことを約束するためにbluebirdを持っていたいと思います。

bluebirdを使用してgcloudパッケージをどのように約束できますか?

Promisification
+0

に一度バケット

Promise.promisifyAll(bucket); 

またはバケットのパッチプロトタイプの各インスタンスのためにそれを行うことができますか? –

+0

それは[Google App Engine Cloud Storage](https://googlecloudplatform.github.io/gcloud-node/#/docs/v0.30.2/storage/bucket?method=getFiles)のオブジェクトです。 – Tim

+1

"Promise.promisify(バケット);' ' –

答えて

2

約ドキュメントによれば、オブジェクト全体

Promisifiesオブジェクトのプロパティ を通過し、物体と そのプロトタイプチェーン上の各機能の非同期等価物を作成すること。

だから、オブジェクトを約束してください。promisifyバケツについては何も言わず、その別のクラスを引き起こします。

あなたはそれが `` bucket``は何アプリケーション

Promise.promisifyAll(require('gcloud/lib/storage/bucket').prototype); 
関連する問題