Source: Components/notification/attemptAsync.js

import { flashMessage } from './flashMessage.js';

/**
 * Wraps any async call into a try/catch directive
 * and fires a flash message when an error occurs
 * @param fn {function(any):Promise<any>}
 * @param successMessage {string=} optional message to be flashed on success
 * @return {Promise<any>}
 */
export const attemptAsync = async (fn, successMessage) => {
  try {
    const value = await fn();
    if (successMessage) {
      flashMessage(successMessage, { type: 'success' });
    }
    return value;
  } catch (e) {
    flashMessage(e.message, { type: 'error' });
  }
};