调用 GetUserIdFromNameAsync() 方法

好的,我正在制作一个关注好友的GUI,我试图从包含名称的字符串中使用 GetUserIdFromNameAsync() 方法。我正在尝试使用 pcall() 避免出错,但即使我经常调用它,它返回 nil,因为我知道它的名称,但当我尝试 pcall() 然后使用 if 语句时,它每次都返回 nil 并走到我的 else 语句中。

local TeleportService = game:GetService("TeleportService")

script.Parent.OnServerEvent:connect(function(player, id)
    place = player.GuiFolder
    print(game.Players:GetUserIdFromNameAsync(id))
    --ISSUE IN LINE BELOW-- ISSUE IS IN THE LINE BELOW
    friend, msg = pcall(game.Players:GetUserIdFromNameAsync(id))
    if friend then
    print(player.Name, player, player.PlayerGui.MainMenu.Name)
    if player:IsFriendsWith(friend) then
        place.IsFriend.Value = true
        local success, errorMsg, placeId, instanceId = TeleportService:GetPlayerPlaceInstanceAsync(friend)
            if success then
                place.foundplayerbar.Value = "Found player. Would you like to join?"
                place.Activated.Value = true
            else enter code here
                place.errorbar.Value = "ERROR: Player not online!"
            end
        else place.errorbar.Value = "ERROR: Not Friends with person!"
    end
    else place.errorbar.Value = "ERROR: Player doesn't exist!"
    end
end)
点赞
用户6357267
用户6357267

根据《Programming in Lua》电子书所述:“假设你想运行一段 Lua 代码并捕获在运行过程中产生的任何错误。你的第一步是将这段代码封装在一个函数中……pcall 函数以受保护模式调用其第一个参数,以便在函数运行时捕获任何错误。如果没有错误,pcall 返回 true,以及调用返回的任何值。否则,它将返回 false 和错误消息。”

而不是直接在这个函数上调用 pcall,先将所有内容封装在一个函数中:

function func()
    friend, msg = game.Players:GetUserIdFromNameAsync(id)
    if friend then
        ...
    else
        ...
    end
 end

然后你可以使用 pcall 调用这个函数并捕获任何错误:

local status, err = pcall(func)
if not status then print(err) end
2016-05-19 18:41:33
用户5666571
用户5666571

Lua文档中指出:

假设你想运行一段Lua代码,并捕获在运行过程中引发的任何错误。你的第一步是将这段代码封装在一个函数中;让我们称其为foo... 然后,你使用pcall调用foo ...

你的代码使用了带有函数的pcall,但它调用了该函数而不是将其作为参数使用。

为了解决这个问题,你可以将game.Players:GetUserIdFromNameAsync(id)放入一个函数中并将其作为参数使用,但更简单的方法是使用匿名函数,如下所示:

friend, msg = pcall(function()
    game.Players:GetUserIdFromNameAsync(id)
end)

这将给你正确的值。

2016-05-19 20:38:47