caching with async promises fixed