request must be a function