publish can have a callback for when it's done