46

promise を使用して JavaScript で aws-sdk を使用したいと考えています。

デフォルトのコールバック スタイルの代わりに:

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

代わりにpromiseスタイルを使用したい:

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

8 に答える 8

32

AWS JavaScript SDK の 2.3.0 リリースでは、promise のサポートが追加されました: http://aws.amazon.com/releasenotes/8589740860839559

于 2016-04-01T00:31:05.817 に答える
25

Promisificationを行う promise ライブラリ( Bluebirdなど) を使用できます。

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約束されたバージョンを取得するためにメソッドに追加することはできません。

于 2014-10-20T21:47:24.233 に答える
5

皆さん、私は使用できませんでした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);
于 2015-03-10T20:23:48.193 に答える
0

このソリューションは私に最適です:

// Create a promise object
var putObjectPromise = s3.putObject({Bucket: 'bucket', Key: 'key'}).promise(); 

// If successful, do this:
putObjectPromise.then(function(data) {
 console.log('PutObject succeeded'); })

// If the promise failed, catch the error:
.catch(function(err) { 
console.log(err); });
于 2019-07-11T08:17:56.780 に答える