2 回答
TA贡献1776条经验 获得超12个赞
首先,您可以映射它们并全部执行 Promise,而不是为每个和推送承诺。你不需要推动。你的函数可以直接返回你的 Promise all 调用。调用者可以等待它或使用 then... 像这样的东西(我没有测试它)
// serverlist declaration
function getList(serverlist) {
const operations = serverlist.map(Server => {
if (Server.mon_sid.includes('_DB')) {
return home.checkOracleDatabase(Server.mon_hostname, Server.mon_port);
} else if (Server.mon_sid.includes('_HDB')) {
return home.checkHANADatabase(Server.mon_hostname, Server.mon_port);
} else {
return home.checkPort(Server.mon_port, Server.mon_hostname, 1000);
}
});
return Promise.all(operations)
}
const serverlist = [...]
const test = await getList(serverlist)
// test is an array of fulfilled/unfulfilled results of Promise.all
所以我会创建一个函数,它接受一个操作列表(serverList)并像上面的例子一样返回承诺,而不用等待它。调用者将等待它或使用另一个承诺来执行对您的函数的所有其他调用。潜在地,您可以像 Inception 一样深入 :)
// on the caller you can go even deeper
await Promise.all([getList([...]) , getList([...]) , getList([...]) ])
考虑到您添加的内容,您可以返回更自定义的内容,例如:
if (Server.mon_sid.includes('_DB')) {
return home.checkOracleDatabase(Server.mon_hostname, Server.mon_port).then(result => ({result, name: 'Oracle', index:..., date:..., hostname: Server.mon_hostname, port: Server.mon_port}))
在上述情况下,您的承诺将返回一个带有操作输出结果的 json,以及一些您可能希望重用以组织数据的附加字段。
添加回答
举报