NodeJS结合了异步函数的输出

时间:2013-12-26 21:13:56

标签: 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
},

1 个答案:

答案 0 :(得分:2)

尝试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);

    }

},