2017-06-11 73 views
0

我正在嘗試使用AWS Javascript SDK來訪問S3。我正在使用'Q'庫的承諾。但它不起作用。 我也設置了Q依賴。AWS Javascript SDK with Promises

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

這裏是我的代碼:

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

這顯示在控制檯上:

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

我有一個有效的S3客戶端設置正確。回調格式的工作原理:

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並不期望回調,當使用典型的promise執行器回調調用時,它只是返回了該函數值實現的承諾。

您可以使用Q.Promise代替,這也被記錄在this blog post's example

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