Convert promise chains to async/await syntax for better readability, error handling, and proper cleanup operation placement. Async functions automatically return promises, so avoid redundant Promise.resolve() calls or manual promise wrapping.

Key benefits:

Example transformation:

// Before: Complex promise chain with misplaced finally
destroy(deletedBy, opts) {
  return this.setDeletedState(deletedBy).then(() => {
    // operation
  }).finally(() => {
    // cleanup only applies to inner promise
  });
}

// After: Clean async/await with proper cleanup scope
async destroy(deletedBy, opts) {
  this.set("isDeleting", true);
  try {
    await this.setDeletedState(deletedBy);
    // operation
  } finally {
    // cleanup applies to entire operation
    this.set("isDeleting", false);
  }
}

Avoid returning Promise.resolve() from async functions as they already return promises automatically.