function translateError(msg) { var newErr = new Error(msg); // placed here to get correct stack return e => { newErr.originalError = e; throw newErr; } } async function asyncTask() { const user = await UserModel.findById(1).catch(translateError('No user found')) if(!user) throw new Error('No user found'); const savedTask = await TaskModel({userId: user.id, name: 'Demo Task'}) .catch(translateError('Error occurred while saving task')) if(user.notificationsEnabled) { await NotificationService.sendNotification(user.id, 'Task Created') .catch(translateError('Error while sending notification')) } if(savedTask.assignedUser.id !== user.id) { await NotificationService.sendNotification(savedTask.assignedUser.id, 'Task was created for you') .catch(translateError('Error while sending notification')) } return savedTask }