Reputation: 1807
I'm using promise
.
Now I try to put the promise inside loop query, assume result2['recordset']
have 2 data.
result2['recordset'].forEach(function(element, index){
var query = new Promise((success, failure) => {
request.query("SELECT M.id, M.name, M.link, M.project_idfk, M.icon FROM tbl_module M WHERE M.project_idfk = '" + element.project_idfk + "' AND M.id IN(SELECT module_idfk FROM tbl_access_module WHERE group_idfk = '" + element.group_idfk + "' AND role IS NOT NULL AND(role = 'CREATE' OR role = 'VIEW'))", function (err, result3){
success(result3['recordset']);
console.log(result3['recordset']);
});
});
});
query.then(function(result) {
console.log(result);
res.json({ module: result });
})
When I tried to console.log(result3['recordset']);
it can show me the all of both data.
[
{
id: 6,
name: 'Department',
link: 'department',
project_idfk: 2,
icon: 'glyphicon-tasks'
}
]
[
{
id: 1,
name: 'Location',
link: 'location',
project_idfk: 1,
icon: 'glyphicon-screenshot'
},
{
id: 2,
name: 'Device',
link: 'device',
project_idfk: 1,
icon: 'glyphicon-hdd'
},
{
id: 3,
name: 'Floor Map',
link: 'map',
project_idfk: 1,
icon: 'glyphicon-map-marker'
},
{
id: 4,
name: 'Notification',
link: 'notificaction',
project_idfk: 1,
icon: 'glyphicon-globe'
},
{
id: 5,
name: 'Report',
link: 'report',
project_idfk: 1,
icon: 'glyphicon-tasks'
}
]
But why when I tried to console.log(result);
it only show me the first data (no ID number 6)
[
{
id: 1,
name: 'Location',
link: 'location',
project_idfk: 1,
icon: 'glyphicon-screenshot'
},
{
id: 2,
name: 'Device',
link: 'device',
project_idfk: 1,
icon: 'glyphicon-hdd'
},
{
id: 3,
name: 'Floor Map',
link: 'map',
project_idfk: 1,
icon: 'glyphicon-map-marker'
},
{
id: 4,
name: 'Notification',
link: 'notificaction',
project_idfk: 1,
icon: 'glyphicon-globe'
},
{
id: 5,
name: 'Report',
link: 'report',
project_idfk: 1,
icon: 'glyphicon-tasks'
}
]
Upvotes: 0
Views: 82
Reputation: 10111
forEach on won't handle promises, Change that to map and use Promise.all to get results.
const promises = result2["recordset"].map(function (element, index) {
return new Promise((success, failure) => {
request.query(
"SELECT M.id, M.name, M.link, M.project_idfk, M.icon FROM tbl_module M WHERE M.project_idfk = '" +
element.project_idfk +
"' AND M.id IN(SELECT module_idfk FROM tbl_access_module WHERE group_idfk = '" +
element.group_idfk +
"' AND role IS NOT NULL AND(role = 'CREATE' OR role = 'VIEW'))",
(err, result) => {
success(result["recordset"]);
console.log(result["recordset"]);
}
);
});
});
Promise.all(promises).then(function (result) {
console.log(result); // list or all result
// Do something and send response
res.json({ module: result });
});
Upvotes: 1