future can be null, directly pass the asyncHandler