If the functions return promises, the caller will wait until they're fulfilled and slots open to start new functions.