AWS Javascript SDK with Promises

AWS Javascript SDK with Promises

我正在尝试使用 AWS Javascript SDK 访问 S3。我正在使用 Promises with 'Q' 库。但是它不起作用。 我也设置了Q依赖。

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

为什么承诺代码不起作用?

您需要将 Promise 构造函数传递给 setPromisesDependency。您使用的 Q function 不需要回调,当使用典型的 promise 执行器回调调用时,它只返回一个用该函数值实现的 promise。

您可以使用 Q.Promise instead, which also is documented in this blog post's example:

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