node.js - 当/Node liftAll 不适用于 s3 对象

标签 node.js amazon-s3 promise when-js

我尝试使用 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/

相关文章:

javascript - SockJS 对 WebSocket 使用无效 URL

node.js - Node lambda 未写入 DynamoDB 且没有错误

python - 使用 Luigi 进行循环机器学习 ETL

javascript - 为什么这个 promise 不起作用?

javascript - AngularJS : Should service's boolean method return promise that resolves to true/false, 或者被解决/拒绝?

javascript - node.js 中的异步 https 请求

node.js - 在expressjs中捕获复数路线

amazon-s3 - 使用我自己的域/子域生成 AWS S3 PreSigned URL

scala - 在 Spark 任务中创建新的 s3 客户端实例

javascript - 如何访问 Promise.map 中的 'this'?