I didn't actually read your code to see if you account for this, but one problem with this simplification, at least the very brief "that's it" description, is the fact that promises may be resolved before you hook up the thing receiving the callback. In other words, the case where you say .addEventListener but the event had already fired.