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,以及一些您可能希望重用以組織數據的附加字段。
添加回答
舉報