AWS Javascript SDK with Promises



我正在尝试使用 AWS Javascript 开发工具包访问 S3。我正在使用带有"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 函数不需要回调,当使用典型的 promise 执行器回调调用时,它只是返回使用该函数值实现的承诺。

您可以改用Q.Promise,这也记录在本博客文章的示例中:

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

最新更新