我正在尝试使用 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);