A primer on the care and feeding of asynchronous promises