2017-06-11 18 views
0

S3にアクセスするためにAWS Javascript SDKを使用しようとしています。私は「Q」ライブラリーで約束を使用しています。しかし、それは動作していません。 Q依存関係も設定しました。私は、有効なS3クライアントが正しく設定されているAWS Javascript SDK with Promises

response = function (resolve, reject) { 
     self.on('complete', function(resp) { 
     if (resp.error) { 
      reject(resp.error); 
     } else { 
      // define $response property so that it is not enumberable 
      // this prevents circular reference errors when stringifying the JSON object 
      resolve(Object.defineProperty(
      resp.data || {}, 
      '$response', 
      {value: resp} 
     )); 
     } 
     }); 
     self.runTo(); 
    } 

var listBucketPromise = s3.listBuckets().promise(); 
listBucketPromise.then(
    function (response) { 
     console.log(" response = " + response); 
    } , 
    function (error) { 
     console.log(" error = " + error); 
    } 
); 

これは、コンソール上で示しています

var Q = require('q'); 
AWS.config.setPromisesDependency(Q); 

は、ここで私が持っているコードです。コールバックの形式は次のとおりです。

s3.listBuckets(function (err, data) { 
    console.log(data); 
}); 

なぜ約束コードが機能しないのですか?

+1

は、あなたが「*これは*コンソール上に表示さ」とはどういう意味ですかは、エラーメッセージということですか? – Bergi

+2

'setPromisesDependency'がプロミスコンストラクタを期待していると仮定すると、代わりに' Q.Promise'を渡してみてください – Bergi

+0

私はWebStormターミナルを介してスクリプトをテストしています。それは私がコンソールで意味するものです。そのログを出力するコードは 'console.log(" response = "+ response"; ' – Manish

答えて

1

PromiseコンストラクタをsetPromisesDependencyに渡す必要があります。あなたが使用したQ functionはコールバックを期待していません。典型的な約束エグゼキュータコールバックで呼び出されたときに、そのファンクション値で満たされた約束が返されました。またthis blog post's exampleに記載されていますが、代わりにQ.Promiseを使用することができます

、:

// Use Q implementation of Promise 
AWS.config.setPromisesDependency(require('Q').Promise);