如何使用express.js获取两个收集文档并计算点数?

时间:2016-11-22 09:08:37

标签: node.js express

exports.show = = function(req, res) {
    var userdata = [{
        "productcode": "9563456789",
        "cost": "1000"

    }, {
        "productcode": "8756348947",
        "cost": "5600"

    }]



    var parameterObject = [];

    Parameter.find().exec(function(err, Parameters) {
        if (err) {
            return handleError(res, err);
        }
        // i want to push Parameters[0].value to parameterObject
        parameterObject.push({
            pointvalue: Parameters[0].value
        });


    });


    for (var i = 0; i < userdata.length; i++) {

        Product.find({
            'productcode': userdata[i].productcode
        }).exec(function(err, Products) {
            if (err) {
                return handleError(res, err);
            }
            var point = 0;
            if (!Products) {
                point = 0;
            } else if (Products[0].product.point > 0) {
                point = Products[0].product.point;
            }
            if (point > 0) {

                // here i am not getting userdata[i].cost
                //parameterObject.pointvalue value also not getting
                totalprice = userdata[i].cost / parameterObject.pointvalue * point;
            }


        });
    }
};

这里我写了计算总价的功能。我提到了userdata(这是我的req.body)。

期望:

我需要将Parameters对象存储在某个变量中以访问我想要的位置。 我想在Product.find()函数

中传递userdata对象

我该如何计算

totalprice= userdata[i].cost/parameterObject.pointvalue) * point);

2 个答案:

答案 0 :(得分:1)

如果您想使用两个函数的结果,稍后可以使用 promises 进行进一步的计算。

在您的情况下,您可以并行执行两个异步函数。它看起来像这样。

Promise.all([
    asyncFunc1(),
    asyncFunc2(),
])
.then(function(result){
    // result is an array and has the response of the functions which is
    // result[0] and result[1]
    ···
   // you can manipulate the result of the functions here
})
.catch(function(err){
    // Receives rejection/error among the Promises
    ···
});

这里asyncFunc1()将是你的第一个查找函数

asyncFunc2()将是您的第二个查找函数。

结果[0]和结果[1]将分别是函数的结果。

稍后您可以使用结果进行进一步的计算。

希望这会有所帮助。

答案 1 :(得分:1)

exports.show = = function(req, res) {
    var userdata = [{
        "productcode": "9563456789",
        "cost": "1000"

    }, {
        "productcode": "8756348947",
        "cost": "5600"

    }]

    var parameterObject = [];

    Parameter.find().exec(function(err, Parameters) {
        if (err) {
            return handleError(res, err);
        }
        // i want to push Parameters[0].value to parameterObject 
        parameterObject.push({
            pointvalue: Parameters[0].value
        });

        return FindProducts(parameterObject, function(data) {
            console.log(data);
        });
    });

    function FindProducts(parameterObject, callback) {
        for (var i = 0; i < userdata.length; i++) {
            var totalprice = 0;
            findProduct(i, parameterObject,  function(i, price) {
                totalprice += price;
                if (i <= userdata.length) {
                    return callback({
                        "userid": "myuserid",
                        "total": totalprice
                    });
                }
            });
        }
    }

    function findProduct(i, parameterObject, callback) {
        Product.find({
            'productcode': userdata[i].productcode
        }).exec(function(err, Products) {
            if (err) {
                return handleError(res, err);
            }
            var point = 0;
            if (!Products) {
                point = 0;
            } else if (Products[0].product.point > 0) {
                point = Products[0].product.point;
            }
            if (point > 0) {

                // here you can now get the value of userdata[i].cost 
                // here you can now get the value of parameterObject 
                totalprice = userdata[i].cost / parameterObject[0].pointvalue * point;

                return callback(i, totalprice);
            }

        });
    }


};