My datastore for my skin colors that I want to be changed throughout a GUI seems to be working, but it has a few issues. One issue is that when the Finish button is clicked in the GUI, it fires a RemoteEvent serverside, and in that script on the server event, it changes a string value's value in the player, which is the player's skin color, but the DataStore doesn't seem to recognize or doesn't seem to be updating.

My datastore script:

local DataStore = game:GetService("DataStoreService"):GetDataStore("CharacterGUI")

local function saveSkin(plr)
	local key = "plr-"..plr.UserId
	
	
	local folder = Instance.new("Folder")
	folder.Parent = plr
	folder.Name = "SkinData"
	
	local skinc = Instance.new("StringValue")
	skinc.Parent = folder
	skinc.Name = "SkinColor"
	
	local CharDataFunc = pcall(function()
		CharData = DataStore:GetAsync(key)
	end)
	
	if CharData then
		skinc.Value = CharData[1]
		print("Data found")
		print(skinc.Value)
		for i,v in pairs (CharData) do
			print(v)
		end
		local skincolor = CharData[1]
		for i, v in pairs (CharData) do
				
				local char = plr.Character
				for b, c in pairs (char:GetChildren()) do
					if c.ClassName == "Part" then
						print("Color changing")
						c.BrickColor = BrickColor.new(CharData[1])
						print(c.BrickColor)
					end
					
			end
			
			
		end
		
	elseif not CharData then
		local skincolors = {"Brown","Light orange"}
		skinc.Value = skincolors[1]
		DataStore:SetAsync(key,skincolors)
		print(skinc.Value)
		print("Data not existant")
	end
	
	
end
	
game.Players.PlayerAdded:Connect(function(plr)
	saveSkin(plr)
	local key = "plr-"..plr.UserId
	plr.SkinData.SkinColor.Changed:Connect(function()
		DataStore:GetAsync(key)
		print(DataStore:GetAsync(key))
	end)
	
	
	local char = plr.Character
	
	local plrinplrs = game.Players:FindFirstChild(plr.Name)
	if plrinplrs ~= nil then
		game.Players[plr.Name].CanLoadCharacterAppearance = false
		
		game.Players[plr.Name]:ClearCharacterAppearance()
		
	end
	
	plr.Character.Humanoid.Died:Connect(function()
		plr:LoadCharacter()
		local char = plr.Character
		local skindata = DataStore:GetAsync(key)
		
		for i, v in pairs (char:GetChildren()) do
			if v.ClassName == "Part" then
				print("Color changing while dead")
				v.BrickColor = BrickColor.new(skindata[1])
				print(v.BrickColor)
			end		
		end			
	end)
	
end)

My script that occurs when the Finish button is clicked:

local DataStore = game:GetService("DataStoreService"):GetDataStore("CharacterGUI")
script.Parent.OnServerEvent:Connect(function(plr,skincolorval)
	
	local skinc = plr.SkinData.SkinColor
	skinc.Value = skincolorval
	
	local key = "plr-"..plr.UserId
	
	DataStore:SetAsync(key,{skinc.Value})
	DataStore:GetAsync(key)
	local dg = DataStore:GetAsync(key)
	
	for d, a in pairs (dg) do
		if d == 1 then
			print("1")
		print(a) end
		
		for k, c in pairs (plr.Character:GetChildren()) do
		if c:IsA("BasePart") then
			
			c.BrickColor = BrickColor.new(dg[1])
			print("finish button color")
			print(c.BrickColor)
			
		end
		
	end
	end
end)