promises for silly DOM callback crap