我需要创建一个具有以下结构的数组:
[
{
position: 2,
family: 9404,
part: [ 'article1', 'article2', 'article3' ]
},
{
position: 3,
family: 9405,
part: [ 'article4', 'article5', 'article6' ]
}
]
所以我有一个表格,我选择我想要的部分,并发送家庭获取网址。在getter功能,我做一个获取每个家庭的文章,我想查询一些文章和一个选择职位。之后,我尝试将每个阵列推送到主阵列,但我不能,显示未定义。我该怎么做这种操作?
我是node和express的新手,这是我第一次这样做。
我的代码:
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);
});
}
在承诺中只打印第一个参数“parts”,如果我把[parts, position, families]
给我承诺待定。
我如何将数据放在我上面显示的结构中。
parseData:
[
{
"compounds": ["8"],
"supplier": ["sup"],
"families": ["9305"]
}
]
请教我如何进行此类操作。
谢谢
答案 0 :(得分:1)
你错误地使用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);
})
答案 1 :(得分:1)
families
传递给Promise.all
families
的原因似乎只是来自查询的数据数组Promise.all
在输入中获取一系列承诺,并且您传递了一系列承诺和数据数组... 所以:
Promise.all([...parts, ...position])
或者如果您不使用ES6语法Promise.all(parts.concat(position))
并修复你的SQL!
====
最终代码可能如下:
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);
});
};
答案 2 :(得分:-1)
Promise.all()
接受一系列承诺,看起来你正在传递多个数组。