AWS putItem関数で Bluebird の promisify 関数を使用したいと考えています。ドキュメントから、AWS.Request オブジェクトを返すことに注意してください。私はそのオブジェクトには興味がなく、理想的には db.putItem({...}); を呼び出すだけです。Promise を取得します。これは可能ですか?私が試してみたところ、promisify された関数は依然として AWS.Request オブジェクトを返します。これは妥当だと思いますが、この場合は私が望んでいるものではありません。
とりあえずPromiseオブジェクトを作って成功とエラーのデータをresolve/reject promise関数に手動でマッピングしているだけなのですが、戻り値以外にputItem関数(および他の関数の可能性があります) は、promisify に適しているようです。
リクエストに応じて、コードの関連部分を以下に示します。
//datastore.js
var AWS = require('aws-sdk');
var sharedDB;
if (!sharedDB) {
AWS.config.update({accessKeyId: 'akid', secretAccessKey: 'secret', region: "us-west-2"});
sharedDB = new AWS.DynamoDB();
sharedDB.setEndpoint("http://localhost:8000");
Promise.promisify(sharedDB.putItem);
}
module.exports.sharedDB = sharedDB;
//user.js
var db = require('../datastore/dynamoDBConnection').sharedDB;
var Promise = require("bluebird");
function User() {
var user = this;
...
user.save = function () {
var params = {
Item: {
username: {S: 'test'},
passwordHash: {S: 'test'}
},
TableName: 'users',
Expected: {
username: {Exists: false}
}
};
return db.putItem(params); //this is where I would like have a Promise returned. Instead I get an AWS.Request object.
}
...
}