JSFiddle - React, Tailwind, and code Playground

HTML

<div id="log"></div>

JavaScript 1.7

function log() {
	document.querySelector('#log').innerText += (arguments.map(a => a.toString()).join(' | '));
}

let locked = false;

class Workout {
	constructor() {
  	this.instructorPeer = new Map();
    this.lock = Promise.resolve();
  }
  async getAllPartners() {
  	if (locked) {
			throw new Error('THIS SHOULD NEVER HAPPEN');
    }
    locked = true;
  	return new Promise((resolve) => {
    	setTimeout(() => {
      	locked = false;
      	resolve(/* partners */[
	        	{value: {type: 'chrome', isAvailable: true}, id: 'abc'},
            {value: {type: 'chrome', isAvailable: true}, id: 'xyz'},
          ])
      }, 3000)
    });
  }


  async createSession(partnerInfo) {
  	this.lock = this.lock.then(async () => {
    	
      const partners = { chrome: [], firefox: [], safari: [], ie: [] }
      console.info('retrieving partners for', partnerInfo);
      const appropriatePartners = await this.retrievePartners(partnerInfo)
      console.info('retrieved partners')
      Object.keys(appropriatePartners).forEach(key => {
        appropriatePartners[key].forEach(partner => {
          const newPartner = console.info(
              'Creating partner', this.instructorPeer, partner.id);
          partners[key].push(newPartner)
        })
      })

      return console.info('Creating session with', partners)
    });
  }

  async retrievePartners(capabilities) {
    const appropriatePartners = { chrome: [], firefox: [], safari: [], ie: [] }
    const partners = await this.getAllPartners()

    // first check if there is available appropriate Partners
    Object.keys(capabilities.type).forEach(key => {
      let typeNumber = parseInt(capabilities.type[key])
      for (let i = 0; i < typeNumber; i++) {
        partners.forEach((partner, i) => {
          if (
            key === partner.value.type &&
            partner.value.isAvailable &&
            appropriatePartners[key].length < typeNumber
          ) {
            appropriatePartners[key].push(partner)
     ...