我如何提交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
模块是否可取,但是在这里。
我们需要捐款,我们只是花时间让我们实际使用的客户,但还有很多事情要做,所以请做!