如何使用Node.js javascript将多个JSON数组异步组合为1
我使用NodeJS和Async来执行多个select查询。因此,我想用firstqueryarray和secondqueryarray填充集合数组 如何将第一个和第二个响应组合到一个数组中如何使用Node.js javascript将多个JSON数组异步组合为1,javascript,arrays,json,node.js,multidimensional-array,Javascript,Arrays,Json,Node.js,Multidimensional Array,我使用NodeJS和Async来执行多个select查询。因此,我想用firstqueryarray和secondqueryarray填充集合数组 如何将第一个和第二个响应组合到一个数组中 exports.relations = function (req, res) { var collection = []; async.parallel([ function () { var firstqueryarray= [];
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
});
});
}
]
)
};
您可以考虑这里的传统CAMELSE,即,作为一个变量名的第二个QuealSube。 async.parallel将一个接一个地快速执行作为其第一个参数传递的数组中的所有函数,并且在所有函数返回后,执行传递给它的第二个函数
因此: 目前,您的两个函数完成得很奇怪:一个在数组内部,一个在数组外部,并作为第二个参数传递。您应该同时拥有数组中的两个函数,而不是数组中的一个和数组外的一个。数组中的两个函数的res.json调用都应替换为collection.push调用。然后,作为async.parallel的第二个参数,您应该有一个函数,该函数将在数组中执行res.jsoncollection的所有调用完成后执行那不合适吗?使用parallel,您不想在该数组中传递两个或多个函数吗?否则,使用parallel有什么意义?@KevinB,the]并不是不合适,但您指出这并没有利用并行性是正确的。请查看更新的答案…@KevinB,the]确实不合适,我很有可能在一分钟后,您错过了.parallel的回调,这再次使它变得毫无意义!我很想听听对投票结果不乐观的解释。这不一定是我写这段代码的方式,但我倾向于用回答问题所需的最小更改来响应,以便相关的差异尽可能清楚。。。
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);
}
)
};