我尝试使用 when/node
提升 Amazon S3 对象中的所有函数。
var when = require('when');
var nodefn = require('when/node');
var AWS = require('aws-sdk');
var s3 = new AWS.S3();
var promisedS3 = nodefn.liftAll(s3);
when(promisedS3.listBuckets())
.then(function(data) {
console.log(data);
})
但是,看起来正在打印出一个请求对象。我对这里发生的事情有点不知所措,如果我单独提升函数,我可以获得正确的结果,如下所示:
var listBucketsP = nodefn.lift(s3.listBuckets.bind(s3));
有什么想法吗?
最佳答案
试试这个:
nodefn.liftAll(s3.__proto__, undefined, s3);
然后就这样做
s3.listBuckets().then(function(data) {
console.log(data);
});
这对我有用。
说明:您尝试修改的方法不是 s3
对象本身的一部分,而是其原型(prototype)的一部分。什么时候 node.liftAll
的 3 个参数版本首先采用源对象,一个可选的转换函数,最后是目标对象(将提升的函数附加到其上)。
因此,我们从原型(prototype)中获取函数,并将 promise 版本附加到我们正在使用的对象。
关于node.js - 当/Node liftAll 不适用于 s3 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25069146/