Alfred's workflows can include an "eject all" system command. I've set up a keyboard shortcut to eject all my drives, for easy use when I want to unplug the laptop.
It certainly works, but some drives take longer than others—mechanical disks might need to spin up (my RAID takes a while)—so it varies a lot. Sometimes the notifications flick by in rapid succession (replacing each other, so you only see the most recently ejected), and sometimes you wait 10 seconds. Sometimes a disk won't eject, times out, and you get that pop-up.
Obviously Alfred is tracking its attempts to eject each volume, so it seems like it should be able to perform an action once all drives are ejected. Essentially I'm wanting to add a "Large Type" action to run when all volumes have finished ejecting saying "Safe to Unplug" or something like that. However, if you chain an action onto the tail end of the "Eject All" system command, it executes immediately, rather than waiting for the "eject all" to complete (successfully).
Sorry if I've missed a simple way to set this up, but I think it ought to be a feature of the "eject all" system command in workflows, that it (optionally?) blocks the output trigger until it's completed (or timed out).
My use-case would be to trigger on completion if all volumes eject as expected, but perhaps there's use-cases for triggering on failure/timeout (or triggering immediately, as it currently does, though that seems redundant as you could trigger off whatever triggered the 'eject all' itself). I expect the same might apply to "Quit All Apps" too, but I've never used that.