Datastore:ListKeysAsync()报错:尝试遍历Instance值问题求助
问题排查与解决方案
核心错误原因
错误attempt to iterate over a Instance value是因为ListKeysAsync()返回的是DataStoreKeyPages实例,而非可直接用for遍历的表。Roblox数据存储的键采用分页返回机制,必须通过该实例的专属方法逐页获取键列表。
修复后的getNewLvls()函数
local function getNewLvls () -- 获取键分页对象 local keyPages = lvlStore:ListKeysAsync() -- 循环处理每一页数据 repeat -- 获取当前页的键列表(为可遍历的表) local currentPage = keyPages:GetCurrentPage() -- 遍历当前页所有键 for _, keyInfo in ipairs(currentPage) do -- keyInfo包含KeyName属性,传入对应键名到加载函数 loadDataView(nil, keyInfo.KeyName) -- 若需指定玩家,可根据业务逻辑传入对应玩家实例 end -- 尝试翻至下一页,无下一页则终止循环 until not keyPages:AdvanceToNextPageAsync() end
额外需修正的代码问题
- 键值格式错误:原代码中
600-403-518和309-735-817会被Lua解析为数值运算(结果分别为-321和-1243),而非目标字符串ID,必须添加引号写成"600-403-518"和"309-735-817"。 - 函数参数不匹配:原代码调用
loadDataView(600-403-518)仅传入一个参数,但函数定义要求两个参数,需根据实际需求补全(无需玩家时传nil)。
修正后的关键代码片段
local function getNewLvls () local keyPages = lvlStore:ListKeysAsync() repeat local currentPage = keyPages:GetCurrentPage() for _, keyInfo in ipairs(currentPage) do loadDataView(nil, keyInfo.KeyName) end until not keyPages:AdvanceToNextPageAsync() end plrs.PlayerAdded:Connect(function(plr) -- 修正键为字符串格式 loadDataView(plr, "309-735-817") end)
内容的提问来源于stack exchange,提问作者Benjacara
相关产品推荐
相关产品推荐

