docs: function PromisesWithMaxAtOnce (PromiseFunc, InputValues, MaxAtOnce, TypeKey, Options){
      // You can input any promise that should be limited by open at the same time
      // PromiseFunc is a function that returns a promise and takes in an input value
      // InputValue is an Array of those InputValues
      // MaxAtOnce is the number of Promises maximum pending at the same time
      let typeKey = TypeKey || getInternalArrayName();
      let options = Options || {};
      
      MaxAtOnce = currentPromiseMaxNumbers[typeKey] ? currentPromiseMaxNumbers[typeKey] : MaxAtOnce;
      
      if(!currentPromiseMaxNumbers[typeKey]) currentPromiseMaxNumbers[typeKey] = MaxAtOnce;
  
      
      let runningPromises = getCountRunningPromises(currentPromiseArrays[typeKey] || []);      
      let launchArray = getLaunchArray(
          PromiseFunc, 
          InputValues, 
          currentPromiseArrays[typeKey] ? currentPromiseArrays[typeKey].length : 0, 
          typeKey,
          options
      );    
  
      // Turn on AutoSplice for the LaunchArray if there is a TypeKey
      autoSpliceLaunchArray(launchArray, typeKey);
  
      // Launch idex is the current index of the promise in the array that is beeing started; 
  
      // First start as much promises as are allowed at once (if there are less in the array than max allowed, start all of them)
      // null counts as infinite so the maxAtOnceStatement will just be true if null has been submitted
      let maxAtOnceStatment = MaxAtOnce ? (runningPromises<MaxAtOnce) : true;
      for(let i=0; maxAtOnceStatment && i < launchArray.length; i++){
          launchArray[i].resolveLaunchPromise();
          runningPromises = getCountRunningPromises(currentPromiseArrays[typeKey]);
          maxAtOnceStatment = MaxAtOnce ? (runningPromises<MaxAtOnce) : true;
      }
      
      // For each Promise that finishes start a new one until all are launched
      
      return launchArray;
  }