No matter what you do datastore data is stored on roblox servers, so if you lose information its probably not your but roblox’s problem theres not a lot of much things you can do to making your datastore strong, you can wrap things in pcall, make retry system etc. etc. and that will make your datastore stronger than what was enough
It was the forever article.
That post is talking about SetAsync, not GetAsync.
Oh yeah, thanks. How can I make my datastore stronger like lose not as much information?
How would I do use the error functions?
You should check if the function is successful, and if not, retry until it succeeds.
Here is a post about pcalls:
Well first of all i recommend using profileservice module it handles everything i described and its free. For your question, check this article Pcalls - When and how to use them - Resources / Community Tutorials - Roblox Developer Forum it also has a example for datastores
What is the profile service module?
Okay Thanks! I am only changing my datastore because I keep losing information.
ProfileService is a module that loads and saves data. Here is a post about ProfileService:
I dont understand what do you mean you just gave me images
I bought some tools but they did not even save. I have a folder named ToolSaved in Replicated Storage. This may be because it is too quick to save but I am not sure.
local DataStore = game:GetService("DataStoreService"):GetDataStore("MyDataStore")
game.Players.PlayerAdded:Connect(function(plr)
local data
local success, errorMessage = pcall(function()
data = DataStore:GetAsync(plr.UserId)
end)
if data ~= nil then
for _, toolName in pairs(data) do
local tool = game.ReplicatedStorage.ToolsSaved:FindFirstChild(toolName)
if tool then
local newTool = tool:Clone()
newTool.Parent = plr.Backpack
local newTool = tool:Clone()
newTool.Parent = plr.StarterGear
end
end
end
end)
game.Players.PlayerRemoving:Connect(function(plr)
local toolsTable = {}
for _, tool in pairs(plr.Backpack:GetChildren()) do
if game.ReplicatedStorage.ToolsSaved:FindFirstChild(tool.Name) then
table.insert(toolsTable,tool.Name)
end
end
local success, errorMessage = pcall(function()
DataStore:SetAsync(plr.UserId,toolsTable)
end)
end)
game:BindToClose(function()
for _, plr in pairs(game.Players:GetPlayers()) do
local toolsTable = {}
for _, tool in pairs(plr.Backpack:GetChildren()) do
if game.ReplicatedStorage.ToolsSaved:FindFirstChild(tool.Name) then
table.insert(toolsTable,tool.Name)
end
end
local success, errorMessage = pcall(function()
DataStore:SetAsync(plr.UserId,toolsTable)
end)
end
end)
local data
local success, errorMessage = pcall(function()
data = DataStore:SetAsync(plr.UserId)
end)
This code is making the error, its pretty self explanitory. Also you are using pcall’s without handling the outcome you should read the article i gave you fully and dont rush and paste writing code like you did here it creates really silly errors
Isn’t that correct? I looked at the article and it makes sense.
yes, its correct but you are doing nothing with the result you can do like if not success then handle the error
edit: what i would do here is use discord webhooks to alert me the issue with the data so i can recover their data manually if required.
That is incorrect, you should be using DataStore:GetAsync() for getting data.
Also, Discord webhooks are not for logging.
Thats the code from the OP, not me. I just gave the code and said “this code is making the error, its pretty self explanitory.” you should read my full post before saying its incorrect
Okay I am confused. So the data is not loading that is why it is not working?