我正在尝试使用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);
});
为什么承诺代码不起作用?
答案 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);