我不确定要确保这些函数按顺序运行,并且将第一次调用的结果用于第二次调用。
数据库功能
async runquery(){
try {
...
const results = await db.statementExecPromisified(statement, []);
return results;
} catch (e) {
console.log("Error - " +JSON.stringify(e));
return e;
}
}
组ID
async function groupByID(approvers) {
const group = _.groupBy(approvers, 'ID');
return Object.keys(group).map(ID=> {
return group[ID].reduce((approvers, cur, idx) => ({
...approvers,
['NAME' + (idx + 1)]: cur.ID,
}), { ID});
})
最终功能
async function preparePayload() {
if(levels.length != 0 ){
let statement= `SELECT * FROM ITEMS `
list = await runquery(statement) ;
id = await groupByID(list) ;
}
let result={}
result.ID=id;
}
DB的输出:[{ID:1,NAME:'F1'},{ID:2,NAME:'F2'},{ID:1,NAME:'F3'}]
预期输出:[{ID:1,NAME1:'F1',NAME2:'F2'},{ID:2,NAME:'F2'}]
但是输出不符合预期。
[{
"ID": "2"
},
{
"ID": "1"
}]
我猜想这是由于函数执行的顺序所致,因为当我执行console.log(id)
时可以按预期工作,但是当我将其分配给 result 变量时,它将产生意外的输出。
我不确定我是否正确提出了这个问题。请让我知道是否需要更多细节。
答案 0 :(得分:0)
除了两个小小的改动外,我的代码没有其他问题
['NAME' + (idx + 1)]: cur.ID,
需要更改为['NAME' + (idx + 1)]: cur.NAME,
为简单起见,我删除了db调用,并用一个promise替换了它,该promise返回您在帖子中提到的结果。
在此处查看工作代码-https://repl.it/repls/PepperyGrossForms
它给了我这个结果
{
ID: [ { ID: '1', NAME1: 'F1', NAME2: 'F3' }, { ID: '2', NAME1: 'F2' } ]
}
希望这会有所帮助。