I got this script. It should clone the stats and put them in a folder inside the player, but when I start the game and look at the values they're all 0. Please help me

local DataStoreService = game:GetService("DataStoreService")
local dataStore = DataStoreService:GetDataStore("main-ds")
local statsHolder = script.Stats

game.Players.PlayerAdded:Connect(function(newPlayer)
	local key = "player-id: " .. newPlayer.UserId
	local GetSave = dataStore:GetAsync(key)
	
	local DataBaseFolder = Instance.new("Folder", newPlayer)
	DataBaseFolder.Name = "PlayerStats"
	
	for i, v in pairs(statsHolder:GetChildren()) do
		local clone = v:Clone()
		clone.Name = v.Name
		clone.Value = v.Value
		clone.Parent = DataBaseFolder
	end
	
	local cloneHolder = statsHolder:GetChildren()
	cloneHolder.Parent = DataBaseFolder
	
	if GetSave then
		-- player has data
		print("Player has data")
		for _, Stats in pairs(statsHolder:GetChildren()) do
			DataBaseFolder[Stats.Name].Value = GetSave[_]
			print(_, Stats.Name, Stats.Value)
		end
		
	else -- save data
		
		local StatsToSave = {}
		
		for _, Stats in pairs(DataBaseFolder:GetChildren()) do
			table.insert(StatsToSave, Stats.Value)
			print(_, Stats.Name, Stats.Value)
		end
		dataStore:SetAsync(key, StatsToSave)
		
	end
	
	while wait(30) do -- auto save
		
		local StatsToSave = {}
		
		for _, Stats in pairs(DataBaseFolder:GetChildren()) do
			table.insert(StatsToSave, Stats.Value)
			print(_, Stats.Name, Stats.Value)
		end
		dataStore:SetAsync(key, StatsToSave)
	end
	
	game.Players.PlayerRemoving:Connect(function(oldPlayer) 
		local key = "player-id: " .. oldPlayer.UserId
		local StatsToSave = {}
		
		for _, Stats in pairs(DataBaseFolder:GetChildren()) do
			table.insert(StatsToSave, Stats.Value)
			print(_, Stats.Name, Stats.Value)
		end
		dataStore:SetAsync(key, StatsToSave)
	
	end)
end)