[英]How to get response after Loop of requests finished
I try to do multiple requests in for each loop and push data response to an array but I get always the first item only我尝试在每个循环中执行多个请求并将数据响应推送到一个数组,但我总是只得到第一个项目
//Get all roles
router.get('/', async (req, res) =>{
try {
knex.from( roles_table )
.then(roles => {
let rolePermissions =[];
roles.forEach(role => {
knex.select(permissions_table + '.*').from(permissions_table)
.innerJoin(permissions_roles_table, permissions_table + '.id', permissions_roles_table +'.id_permission')
.where(permissions_roles_table + '.id_role', '=', role.id)
.then(rows => {
role.permissions = rows;
rolePermissions.push(role)
});
});
res.status(200).json(rolePermissions);
});
} catch (err) {
res.status(500).json({message: err});
}
});
You must learn about Promise and asynchrone if you want to do modern JS.想做现代JS,必须要了解Promise和asynchrone。
Something like that could be what you are looking for类似的东西可能就是你要找的
//This const will store an array of Promise
const allRows = knex.from( roles_table )
.then(roles => {
return roles.map(role => {
return knex.select(permissions_table + '.*').[...]
});
});
//This method will wait for each promises to succeed or first one to failed
return Promise.all(allRows)
.then( allRows => {
//allRows is now an array containing all the results
res.status(200).json(rolePermissions);
})
.catch (err) {
res.status(500).json({message: err});
});
By the way, you don't need try/catch a Promise, there is the.catch method对了,不需要try/catch一个Promise,有.catch方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.