我如何提交AWS JavaScript SDK?

我想用promise来使用JavaScript中的aws-sdk。

而不是默认的callback风格:

dynamodb.getItem(params, function(err, data) { if (err) console.log(err, err.stack); // an error occurred else console.log(data); // successful response }); 

我反而想用一个承诺风格:

 dynamoDb.putItemAsync(params).then(function(data) { console.log(data); // successful response }).catch(function(error) { console.log(err, err.stack); // an error occurred }); 

AWS JavaScript SDK的2.3.0版本增加了对promise的支持: http : //aws.amazon.com/releasenotes/8589740860839559

你可以使用promisification的承诺库,例如Bluebird 。

这里是一个如何promisition DynamoDB的例子。

 var Promise = require("bluebird"); var AWS = require('aws-sdk'); var dynamoDbConfig = { accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, region: process.env.AWS_REGION }; var dynamoDb = new AWS.DynamoDB(dynamoDbConfig); Promise.promisifyAll(Object.getPrototypeOf(dynamoDb)); 

不是你可以添加Async到任何方法来获取promisified版本。

过期了,但是有一个aws-sdk-promise npm模块可以简化这个。

这只是添加一个promise()函数,可以这样使用:

 ddb.getItem(params).promise().then(function(req) { var x = req.data.Item.someField; }); 

伙计们,我还没有能够使用Promise.promisifyAll(Object.getPrototypeOf(dynamoDb));

但是,以下为我工作:

 this.DYNAMO = Promise.promisifyAll(new AWS.DynamoDB()); ... return this.DYNAMO.listTablesAsync().then(function (tables) { return tables; }); 

要么

 var AWS = require('aws-sdk'); var S3 = Promise.promisifyAll(new AWS.S3()); return S3.putObjectAsync(params); 

CascadeEnergy / AWS-承诺

我们有一个永远在进步的npm模块aws-promised ,这是aws-sdk的每个客户端的蓝鸟promisesify。 我不确定使用上面提到的aws-sdk-promise模块是否可取,但是在这里。

我们需要捐款,我们只是花时间让我们实际使用的客户,但还有很多事情要做,所以请做!