Added support for Async events (#643)

* Added support for async events callbacks

* Don't fire IDLE event if the first callback hasn't completed execution.
This commit is contained in:
Marc-Andre Ferland
2022-12-11 00:52:52 -05:00
committed by GitHub
parent d3c3496e55
commit 5b7cd11de8
3 changed files with 33 additions and 20 deletions

View File

@ -561,16 +561,22 @@ class GenericEventSource {
throw new Error(`Event ${String(name)} missing from Events.types`)
}
if (!this.#events.hasOwnProperty(name)) {
return
return Promise.resolve()
}
if (!args || !args.length) {
args = []
}
const evs = this.#events[name]
const len = evs.length
for (let i = 0; i < len; ++i) {
evs[i].apply(SD, args)
if (evs.length <= 0) {
return Promise.resolve()
}
return Promise.allSettled(evs.map((callback) => {
try {
return Promise.resolve(callback.apply(SD, args))
} catch (ex) {
return Promise.reject(ex)
}
}))
}
}