带有Promises的AWS Javascript SDK

时间:2017-06-11 10:29:26

标签: javascript amazon-web-services amazon-s3 promise q

我正在尝试使用AWS Javascript SDK来访问S3。我正在使用带有'Q'库的Promises。但它不起作用。 我也设置了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);
});

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

1 个答案:

答案 0 :(得分:1)

您需要将Promise构造函数传递给setPromisesDependency。您使用的Q function不期望回调,当使用典型的promise执行程序回调调用时,它只返回了使用该函数值实现的承诺。

您可以使用Q.Promise代替this blog post's example

中记录的内容
// Use Q implementation of Promise
AWS.config.setPromisesDependency(require('Q').Promise);