loadThangTypes (shots) {
    const slugs = []
    shots
      .forEach(shot => {
        const { slug } = getLeftCharacterThangTypeSlug(shot) || {}
        if (slug) {
          slugs.push(slug)
        }
        const { slug: slug2 } = getRightCharacterThangTypeSlug(shot) || {}
        if (slug2) {
          slugs.push(slug2)
        }
        const backgroundSlug = getBackgroundSlug(shot) || {}
        if (backgroundSlug) {
          slugs.push(backgroundSlug)
        }
        const heroPetSlug = (getHeroPet(shot) || {}).slug
        if (heroPetSlug) {
          slugs.push(heroPetSlug)
        }
      })
    // Now we have a list of only slugs, we can fetch the data,
    // storing the promise in our `loadedThangTypes` Map.
    slugs
      .filter(character => character)
      .filter(slug => typeof slug === 'string')
      .filter(slug => !(this.loadedThangTypes.has(slug) || this.loadingThangTypes.has(slug)))
      .forEach(slug => this.queueThangType(slug))
  }
Iterate through the shotSetups and start loading the required thangTypes.
Doesn't block until `load` method is called.

TODO: Add retry logic to the getThang function.