I'm trying to fix this datastore script I created but I cant fix it if their is no error. Does anyone know what I'm doing wrong or what I'm missing? How could it be more efficient?

local DataStore1 = Game:GetService("DataStoreService"):GetDataStore("Killed")
local DataStore2 = Game:GetService("DataStoreService"):GetDataStore("Currency")
local DataStore3 = Game:GetService("DataStoreService"):GetDataStore("Level")
local DataStore4 = Game:GetService("DataStoreService"):GetDataStore("Experience")

Game.Players.ChildAdded:connect(function(Player)
repeat wait() until Player:FindFirstChild("leaderstats")
local Storage = Player.leaderstats
	Storage:FindFirstChild("Killed").Value = DataStore1:GetAsync("UserKILLED_"..Player.userId) or 0
	Storage:FindFirstChild("Currency").Value = DataStore2:GetAsync("UserCASH_"..Player.userId) or 0
	Storage:FindFirstChild("Level").Value = DataStore3:GetAsync("UserLEVEL_"..Player.userId) or 0
	Storage:FindFirstChild("Experience").Value = DataStore4:GetAsync("UserEXPERIENCE_"..Player.userId) or 0

	DataStore1:OnUpdate("UserKILLED_"..Player.userId,function(New)
	Storage:FindFirstChild("Killed").Value = New
	end)
	DataStore2:OnUpdate("UserCASH_"..Player.userId,function(New)
	Storage:FindFirstChild("Currency").Value = New
	end)
	DataStore3:OnUpdate("UserLEVEL_"..Player.userId,function(New)
	Storage:FindFirstChild("Level").Value = New
	end)
	DataStore4:OnUpdate("UserEXPERIENCE_"..Player.userId,function(New)
	Storage:FindFirstChild("Experience").Value = New
	end)
	DataStore1:UpdateAsync("UserKILLED_"..Player.userId,function(Current)
	local Base1 = Current or 0
	return Base1
 	end)
	DataStore2:UpdateAsync("UserCASH_"..Player.userId,function(Current)
	local Base2 = Current or 0
	return Base2
 	end)
	DataStore3:UpdateAsync("UserLEVEL_"..Player.userId,function(Current)
	local Base3 = Current or 0
	return Base3
 	end)
	DataStore4:UpdateAsync("UserEXPERIENCE_"..Player.userId,function(Current)
	local Base4 = Current or 0
	return Base4
 	end)
end)