This way the storage implementation can communicate with any potentially used middleware (e.g. authentication) or for example abort requests.