簡體   English   中英

如何使用Node.js Javascript將多個JSON數組異步組合為1

[英]How to Async combine multiple JSON arrays into 1 with Node.js javascript

我正在使用NodeJS和Async執行多個選擇查詢。 因此,我想填充的collection與陣列firstqueryarraysecondqueryarray

如何將第一個和第二個響應合並到一個數組中?

exports.relations = function (req, res) {

    var collection = [];

    async.parallel([
        function () {
            var firstqueryarray= [];
            connection.query(query1, function (err, rows, fields) {
                if (err) throw err;
                for (var i in rows) {
                    firstqueryarray.push({
                        name: rows[i].name,
                        email: rows[i].email
                    });
                }
                res.json({
                    firstqueryarray: firstqueryarray
                });
            });

        }

    , function () {
            var secondqueryarray= [];
            connection.query(query2, function (err, rows, fields) {
                if (err) throw err;

                for (var i in rows) {
                    secondqueryarray.push({
                        name: rows[i].name,
                        email: rows[i].email
                    });
                }
                res.json({
                    secondqueryarray: secondqueryarray
                });
            });
        }
      ]
    )
};

您可以在此處考慮常規的camelCase(即, secondQueryArray作為變量名)。

async.parallelasync.parallel執行作為第一個參數傳遞的數組中的所有函數,並迅速返回,一旦所有返回,執行傳遞給它的第二個函數。

因此:

當前,您有兩個函數做得很奇怪(一個在數組內部,一個在外部,並作為第二個參數傳遞)。 您應該擁有數組中的兩個函數,而不是數組內部的一個函數和數組外部的一個函數。 數組中的兩個函數都應將其res.json()調用替換為collection.push()調用。 然后 ,作為async.parallel的第二個參數,您應該有一個執行res.json(collection)的函數(它將在數組中的所有調用完成之后執行res.json(collection)

exports.relations = function (req, res) {

    var collection = { collection:[] };

    async.parallel([
        function () {
            var firstQueryArray= [];
            connection.query(query1, function (err, rows, fields) {
                if (err) throw err;
                for (var i in rows) {
                    firstQueryArray.push({
                        name: rows[i].name,
                        email: rows[i].email
                    });
                }
                collection.collection.push(firstQueryArray);
            });

        },
        function () {
            var secondQueryArray= [];
            connection.query(query2, function (err, rows, fields) {
                if (err) throw err;

                for (var i in rows) {
                    secondQueryArray.push({
                        name: rows[i].name,
                        email: rows[i].email
                    });
                }
                collection.collection.push(secondQueryArray);
            });
        }],
        function() {
            res.json(collection);
        }
    )
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM