Chain async callbacks together; monitor progress with events