Listen events more easily with promises.