exit resolver carries message promise into caller