We have a several-years-old Swift codebase that mostly uses PromiseKit promises for async work. My rules for refactoring these are
- Async functions are better than promise-returning functions.
- “Sync” functions are better than async functions! If a function doesn’t actually do anything asynchronously—and if you’re okay breaking your API in the future if that changes—don’t make your callers deal with the hassle of calling it as if it does.