1

我正在尝试使用when/node.

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));

有任何想法吗?

4

1 回答 1

1

尝试这个:

nodefn.liftAll(s3.__proto__, undefined, s3);

然后就做

s3.listBuckets().then(function(data) { 
    console.log(data); 
});

这对我有用。

说明:您尝试修改的方法不是s3对象本身的一部分,而是其原型的一部分。When'snode.liftAll的 3 参数版本首先采用对象,一个可选的转换函数,最后是目标对象(将提升的函数附加到上面)。

所以我们从原型中获取函数并将承诺的版本附加到我们正在使用的对象上。

于 2015-03-10T01:01:39.130 回答