1

を使用して、Amazon S3 オブジェクトのすべての関数を持ち上げようとしています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 のnode.liftAll3 つの引数バージョンは、最初にソースオブジェクト、オプションの変換関数、最後に宛先オブジェクト (リフトされた関数をアタッチするため) を取ります。

そのため、プロトタイプから関数を取得し、約束されたバージョンを処理中のオブジェクトにアタッチします。

于 2015-03-10T01:01:39.130 に答える