Combine best of defer and delay into shared implementation with resolved promise and queue