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
}