javascript - NodeJS 结合异步函数的输出

标签 javascript node.js amazon-dynamodb

各位, 试图解决以下问题。我有一个通过 http.POST 传入的输入数组,我想循环遍历该数组,触发多个 dynamodb 查询,组装输出,然后将此输出作为一个 JSON 对象返回。

我已经验证 POST 工作正常,数组已正确构建,我所需要做的就是发出几个 DynamoDB 调用,组装每个结果,然后返回它。

既然这是异步的,我该如何编写以下内容?

allVehicles: function (req, res, next) {

    checkDB(req, res, next)

    function checkDB(req, res, next) {

        async.each(req.body, lookupDB, function(err) {
            console.log("wtf err");
        });

        returnResponse(callback)
    }

    function lookupDB(uID) {
        var checkUsers = {
            TableName : 'tablename',
            IndexName : 'license-index',
            KeyConditions : 
            {
                "entry":
                {
                    "AttributeValueList" : [
                    {
                        "S" : '1'
                    }
                    ],
                    "ComparisonOperator" : "EQ"
                },
                "license" : 
                {
                    "AttributeValueList" : [
                    {
                        "S" : uID
                    }
                    ],
                    "ComparisonOperator" : "EQ"
                }
            }
        }//var
        db.query(checkUsers, function(err, data) {
            if (err) {
                console.log(err)
            } else {
                if (data.Count > 0) {
                    console.log("found ", data.Count")
                }
            }
        });//dbq
    }

    function returnResponse(upstreamData) {
        res.statusCode = 200;
        res.setHeader('Content-Type', 'text/plain; charset=UTF-8');
        res.send(JSON.stringify(upstreamData, undefined, 2));
        res.end();
    }//fun
},

最佳答案

尝试async.map .

allVehicles: function (req, res, next) {

    async.map(req.body, lookup, function(err, results) {
        if (err) {
            return next(err);
        }
        res.statusCode = 200;
        res.setHeader('Content-Type', 'text/plain; charset=UTF-8');
        res.send(JSON.stringify(results, undefined, 2));
        res.end();
    });

    function lookup(id, done) {

        db.query({
            TableName: 'tablename',
            IndexName: 'license-index',
            KeyConditions: {
                entry: {
                    AttributeValueList: [{ S: '1' }],
                    ComparisonOperator: 'EQ'
                },
                license: {
                    AttributeValueList: [{ S: id }],
                    ComparisonOperator: 'EQ'
                }
            }
        }, done);

    }

},

关于javascript - NodeJS 结合异步函数的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20791344/

相关文章:

javascript - 每 x 次 AngularJS 隐藏和显示 div

Javascript 购买 SDK - 错误 : Not Found

amazon-web-services - 为什么我的Elastic Beanstalk应用程序尽管具有角色,但仍然拒绝PutItem访问我的DynamoDB?

c# - asp.net 中的异步方法导致请求永远无法完成

amazon-dynamodb - 如何在节点js中从DynamoDB中的对象数组中搜索值

javascript - 如何在canvas中画出光滑的椭圆

javascript - GSAP 和 jQuery : play animation on the next page load

javascript - 如何在 Express.js 和 mongoose 中编写异步 for-each 循环?

node.js - 安装 angular/cli 崩溃并出现错误 404

mysql - JWT 身份验证要求我注销并重新登录才能查看用户的更新信息