Data loss issues with datastore script

So I made this datastore script that is working usually 90% of the time. However, there is occasional times where the data doesn’t load/save correctly and your stats are reset. Any way I can solve this?

local players = game:GetService("Players")
local dataStoreService = game:GetService("DataStoreService")
local runService = game:GetService("RunService")
local storage = game:GetService("ReplicatedStorage")

local DataStore = dataStoreService:GetDataStore("RankedModeSettings")

local settingsData = {
	FOV = 70;
	ELO = 0;
};

local playersavetable = {};

local function loadSettings(player)
	local Stats = Instance.new("Folder")
	Stats.Name = "Stats"
	Stats.Parent = player
	for statname, statvalue in pairs(settingsData) do
		if type(statvalue) == 'number' then
			local intvalue = Instance.new("IntValue")
			intvalue.Name = statname
			intvalue.Value = statvalue
			intvalue.Parent = Stats
		elseif type(statvalue) == 'boolean' then
			local boolvalue = Instance.new("BoolValue")
			boolvalue.Name = statname
			boolvalue.Value = statvalue
			boolvalue.Parent = Stats
		elseif type(statvalue) == 'string' then
			local stringvalue = Instance.new("StringValue")
			stringvalue.Name = statname
			stringvalue.Value = statvalue
			stringvalue.Parent = Stats
		end
	end
end

local function loadData(Player)
	local Data
	local s, e = pcall(function()
		Data = DataStore:GetAsync('UserId: ' .. Player.UserId)
	end)
	
	if s then
		print('Getting ' ..Player.Name.."'s data was successful")
	else
		warn('Something went wrong when loading data' ..Player.Name.."'s data")
	end
	 
	if Data then
		for statname, statvalue in pairs(Data) do
			Player.Stats[statname].Value = statvalue
		end
		print("Data has been loaded.")
	else
		print(Player.Name..' has no data! Generating new data.')
	end
end

local function saveData(Player)
	local Data = {}
	for _, stat in pairs(Player.Stats:GetChildren()) do
		Data[stat.Name] = stat.Value
	end
	local s, e = pcall(function()
		DataStore:SetAsync('UserId: ' .. Player.UserId, Data)
	end)
	if s then
		print(Player.Name.."'s data has been successfuly saved!")
	else
		warn("Something went wrong while saving " ..Player.Name.." 's data")
	end
end

players.PlayerAdded:Connect(function(Player)
	playersavetable[Player] = tick()
	loadSettings(Player)
	loadData(Player)
end)

players.PlayerRemoving:Connect(function(Player)
	saveData(Player)
end)

I know this really isn’t a fix and its also preference but I always use Datastore2 when making anything that requires saving, never once have had data-loss issues. So if you can’t find a solution I would consider moving over to DS2.