You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 06:30:02