如何在承诺中使用Amazon DynamoDB JavaScript SDK

问题描述 投票:0回答:1

我正在使用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});    
});
node.js express promise amazon-dynamodb
1个回答
0
投票

我相信您可以使用节点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) => {})之类的东西]

© www.soinside.com 2019 - 2024. All rights reserved.