我正在使用Amazon DynamoDB和Express。
我需要基于Amazon DynamoDB表中的数据呈现视图。
当我使用回调API而不是尝试使用promise时,我的代码工作正常。
但是我想使用Promise因为要保持我的代码整洁,否则我需要从res.send()
的回调内部调用docClient.scan(params)
。
我与promise一起工作的代码如下,我无法弄清楚哪里出了问题;
async function test(params){
AWS.config.loadFromPath('./awsconfigtest.json');
let docClient = new AWS.DynamoDB.DocumentClient();
await docClient.scan(params).promise();
}
下面是路由文件的内容;
/* GET home page. */
router.get('/', function(req, res, next) {
let scanResults ;
let params = {
TableName: 'dummy'
};
test(params).then((data,err)=>{
console.log(data,err);
data.Items.forEach(function (element, index, array) {
scanResults.push({name: element.name, nodeId: element.nodeId});
console.log(element.name + " (" + typeof element.nodeId + ")");
});
});
console.log(scanResults);
res.render("index",{nodes:scanResults});
});
我相信您可以使用节点promisify
中的util
。
类似这样的东西:
const util = require('util');
async function test(params){
AWS.config.loadFromPath('./awsconfigtest.json');
let docClient = new AWS.DynamoDB.DocumentClient();
const scan = util.promisify(docClient.scan);
await scan(params);
}
promisify函数将以回调作为最后一个值的函数转换为promise,该函数将拒绝err
值并解析data
值(例如docClient.scan(params, (err, data) => {})
之类的东西]