【发布时间】:2021-09-10 09:16:08
【问题描述】:
我正在使用promise。
现在我尝试将 promise 放入循环查询中,假设 result2['recordset'] 有 2 个数据。
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 });
})
当我尝试console.log(result3['recordset']); 时,它可以向我显示这两个数据。
[
{
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'
}
]
但是为什么当我尝试console.log(result); 时它只显示第一个数据(没有 ID 号 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'
}
]
【问题讨论】:
-
.forEach()不支持承诺,因此将查询包装在.forEach()循环内的承诺中绝对没有好处。 -
嗨@jfriend00 有什么办法可以解决这个问题吗?
-
您似乎没有对查询结果做任何事情,因此为了知道要推荐什么,我们需要查看您尝试使用它们做什么并查看该代码。此外,我们需要知道循环是否需要排序,或者每次迭代是否可以并行运行。
-
而且,了解您正在使用 NPM 中的哪个数据库模块会有所帮助,因为现在大多数人都可以选择内置的 Promise 支持。
标签: node.js arrays json sql-server promise