[英]Node js - How to return array multidimensional
I need to create an array with this structure: 我需要创建一个具有以下结构的数组:
[
{
position: 2,
family: 9404,
part: [ 'article1', 'article2', 'article3' ]
},
{
position: 3,
family: 9405,
part: [ 'article4', 'article5', 'article6' ]
}
]
So i have a form where i select the parts that i want and send the families to get url.In the getter function i do a for to get the articles of each family and i want to query a select of articles and a select of positions. 所以我有一个表格,我选择想要的部分并发送家庭以获得URL。在getter函数中,我做了一个用于获取每个家庭的文章,我想查询文章的选择和位置的选择。 After that i try to push each array to a main array but i can't, show me undefined. 之后,我尝试将每个数组推送到一个主数组,但是我无法显示未定义的内容。 How can i do this kind of operations? 我该怎么做?
I'm new with node and express and this is the first time that i have to do that. 我是node和express的新手,这是我第一次这样做。
My code: 我的代码:
getFamilies(req, res)
{
console.log(req.params.data);
var parsedData = JSON.parse(req.params.data);
var compounds = parsedData[0].compounds;
var supplier = parsedData[0].supplier;
var families = parsedData[0].families;
console.log(parsedData[0].compounds.length);
var position = [];
var data = [];
var parts = [];
for (var i = 0; i < compounds.length; i++)
{
parts.push(request.query("SELECT st.ref, st.design FROM st WHERE familia ='"+families[i]+"'"));
position.push(request.query("SELECT u_order FROM u_part WHERE u_familia='"+families[i]+"'"));
}
return Promise.all(parts, position, families).then(function(listOfResults)
{
//add parts, position and families to data[]
var data = [];
//console.log(data);
console.log(listOfResults);
console.log("done");
//return listOfResults;
res.render('view2', {teste: data});
}).catch(function(err)
{
// ... query error checks
console.log(err);
});
}
In promise just print the first parameter "parts" and if i put the [parts, position, families]
give me promise pending. 在promise中,只需打印第一个参数“ parts”,如果我输入[parts, position, families]
给我未完成的promise。 And how can i put the data in the structure that i show above. 以及如何将数据放入上面显示的结构中。
parseData: parseData:
[
{
"compounds": ["8"],
"supplier": ["sup"],
"families": ["9305"]
}
]
Please teach me how can i do this kind of operations. 请教我如何做这种手术。
Thank you 谢谢
You incorrectly use Promise.all
, it takes array of promises 您错误地使用Promise.all
,它接受了诺言数组
return Promise.all([Promise.all(parts), Promise.all(position)]).then(function(listOfResults){
var partResult = listOfResults[0];
var positionResult = listOfResults[1];
var data = [];
for (var i=0; i<families.length; i++) {
var family = families[i];
var pos = positionResult[i];
var parts = partResult; // logic to extract parts for current family
data.push({family: family, position: pos, parts: parts})
}
console.log(data);
})
families
to Promise.all
families
seems to just be an array of data from taken from the query 不知道为什么要将families
传递给Promise.all
families
似乎只是从查询中获取的一组数据 Promise.all
takes an array of promises in input, and you're passing an array of arrays of promises and of data... Promise.all
在输入中接受一个Promise.all
数组,并且您正在传递一个Promise.all
和数据数组的数组... So do: 这样:
Promise.all([...parts, ...position])
or if you're not using ES6 syntax Promise.all(parts.concat(position))
Promise.all([...parts, ...position])
或如果您不使用ES6语法Promise.all(parts.concat(position))
and fix your SQL! 并修复您的SQL!
==== ====
Final code could look like: 最终代码如下所示:
getFamilies = (req, res) => {
var families = JSON.parse(req.params.data)[0].families;
var positions = [];
var data = [];
var parts = [];
families.forEach(family => {
// see http://stackoverflow.com/a/7760578/2054629 for mysql_real_escape_string
parts.push(request.query("SELECT st.ref, st.design FROM st WHERE familia ='"+mysql_real_escape_string(family)+"'"));
positions.push(request.query("SELECT u_order FROM u_part WHERE u_familia='"+mysql_real_escape_string(family)+"'"));
});
return Promise.all([Promise.all(parts), Promise.all(positions)]).then(listOfResults => {
var [partResult, positionResult] = listOfResults;
var data = families.map((family, i) => {
var pos = positionResult[i];
var parts = partResult[i];
return {family: family, position: pos, parts: parts};
});
res.render('view2', {teste: data});
}).catch(err => {
// ... query error checks
console.log(err);
});
};
Promise.all()
接受一个promise数组,好像您正在传递多个数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.