Wrap async functions in Result types to handle errors, map values, and recover with or_else in TypeScript