       url += "&options[beforeId]=#{beforeId}" if beforeId
       new Promise((resolve) -> setTimeout(resolve.bind(null, Promise.resolve($.get(url))), 100))
       .then (batchResults) =>
+        return Promise.resolve([]) if @destroyed
         results = results.concat(batchResults)
         if batchResults.length < @batchSize
           @updateLoadingState("Received #{results.length} from #{baseUrl} TOTAL")

        teacherID = trialRequest.applicant
        unless teacherMap[teacherID]
          # E.g. parents
          # console.log("Skipping non-teacher #{teacherID} trial request #{trialRequest.id}")
          continue
        props = trialRequest.properties
        if props.nces_id and props.country and props.state

      console.log(new Date().toISOString(), "Processing #{teachers.length} teachers...")
      @state = "Processing #{courseInstances.length} course instances..."
      for teacher in teachers
        teacherMap[teacher._id] = teacher.geo ? {}

      @updateLoadingState("Processing #{classrooms.length} classrooms...")
      for classroom in classrooms
