【发布时间】:2014-07-05 22:41:05
【问题描述】:
我想在 AWS putItem 函数上使用 Bluebird 的 promisify 函数。从文档中注意到它返回一个 AWS.Request 对象。我对那个对象不感兴趣,理想情况下我会调用 db.putItem({...});并得到一个承诺。这可能吗?当我尝试它时,promisify'd 函数仍然返回一个 AWS.Request 对象,我认为这是合理的,在这种情况下它不是我想要的。
目前我只是创建一个 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.
}
...
}
【问题讨论】:
-
虽然那里有很多细节,但该帖子缺少我询问的特定用例,即在使用回调的函数上使用 promisify,但也返回一个值。跨度>
-
我想我可以根据您对引用答案的回答来改写我的问题:从第三个选项开始,我还能做“Promise.promisify(getStuff);”吗?如果 getStuff 函数也有返回值?
-
它返回什么样的值?它会以错误和结果回调回调吗?如果不是,它如何传达发生了错误?
-
Promisify returns 修改函数,它不会就地改变它
标签: node.js amazon-web-services promise amazon-dynamodb bluebird