everything.
TODO:
* when.map returns rejected promise if one of the promises inside are rejected. WHY
* retry logic
neatness