我正在寻找想法/帮助来改进我的代码。它已经开始工作了,但我对它没有信心,也没有为它感到骄傲。这是我的功能的简短版本 -
module.exports.serverlist = async () => {
let promises = [];
const serverlist = [];
serverlist.push({ mon_sid: 'AAA', mon_hostname: 'aaaa.com', mon_port: 80 })
serverlist.push({ mon_sid: 'BBB', mon_hostname: 'bbbb.com', mon_port: 80 })
serverlist.forEach(async (Server) => {
if (Server.mon_sid.includes('_DB')) {
// Function home.checkOracleDatabase return promise, same as above functions
promises.push(home.checkOracleDatabase(Server.mon_hostname, Server.mon_port));
} else if (Server.mon_sid.includes('_HDB')) {
promises.push(home.checkHANADatabase(Server.mon_hostname, Server.mon_port));
} else {
promises.push(home.checkPort(Server.mon_port, Server.mon_hostname, 1000));
}
})
for (let i = 0; i < serverlist.length; i++) {
serverlist[i].status = await promises[i];
}
console.table(serverlist);
代码做什么?: - 它异步执行所需的服务可用性检查。
期望是什么?- 代码将异步运行,在函数结束时,它将等待所有承诺被解决,对于失败的结果,它将再次执行检查,并对承诺有更多的控制权。目前,promise 与系统数组并没有真正的联系,它只是基于顺序,但将来可能会出现问题。
如果有人可以帮助/提供一些建议,我会非常高兴。另外我不确定NodeJS(或操作系统)可以执行多少并行异步操作。目前列表有30个系统,但未来可能是200-300个,我不确定是否可以一次处理。
更新
我使用了 promise.all - 它工作正常。但是,正如我所提到的,我无法控制 $promises 数组。结果在触发时保存在序列中,这就是将它们从 $promises 分配回 serverlist[i].status 数组的方式。但是我想对它有更多的控制权,我想在 $promises 数组中有一些索引,或者一些东西,这样我就可以确保将结果分配给正确的系统(幸运的是,不是按照分配的顺序来计算)正如它应该)。
此外,我想通过选项扩展此功能以重新尝试失败检查,为此我肯定需要 $promises 数组中的一些索引。
叮当猫咪
元芳怎么了
相关分类